2011-07-05 33 views
2

としてPHPの文字列を解釈します。 "$ xml"は、simplexml_load_file()でXMLファイルを読み込んだときに作成されたオブジェクト(SimpleXMLElement)の略語です。私は次のようになり、文字列の大規模な配列を持つ変数

どうすればこれらを変数として解釈できますか?ドキュメント内に存在するこれらの文字列のそれぞれの値にアクセスしたいが、これを行うことはできない。私は$$形式、$ {}形式、eval()などを使用しようとしましたが、何も私に変数の内容を与えるものではありません。彼らは文字列として私の文字列を表示するだけです。

これらはオブジェクト演算子を使用するものでは機能しませんか?何とかそれらを逃れなければならないのですか?私が行方不明のものは何ですか?

+0

ところで、大変お手数ですが、私は誰もがなぜこのように変数参照を格納するのだろうと思っています。あなたが達成しようとしていることが何であれ達成するためのより良い方法があるはずです。 – dqhendricks

+0

XML要素のリストをループして完全な変数名を表示したり、デバッグ目的でその変数に現在割り当てられているものがあれば、この方法でやっています。 XML要素を掘り起こすよりも見やすく、アルファベット順に並べ替えることができます。 – jlk

+0

simplexml要素を、あたかも配列であるかのようにループすることができますか? XPathに合った要素だけをループできるように、XPathクエリを使用してください。 – dqhendricks

答えて

0

eval works for me。

テストコード:

$blah = new stdClass(); 
$blah->hello = 'hello'; 
$foo = '$blah->hello'; 
eval('echo '.$foo.';'); 
+0

の場合は、 'hello' – dqhendricks

+0

も返されます。巨大なセキュリティホールであるため、ユーザーが提出した/外部のコンテンツを評価する際には注意が必要です。 – dqhendricks

0

あなたはまた、そうのようにこれを達成するために、変数の変数を使用することができます:あなたが使用する前に、文字列のオフにドル記号をトリミングする必要があります

$blah = new stdClass(); 
$blah->hello = 'hello'; 
$foo = 'blah->hello'; 
$bar = explode('->', $foo); 
echo $$bar[0]->$bar[1]; 

お知らせそれはこの方法です。

2

代わりに配列をxpath個の場所に変更できますか?

$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>"); 
$array = array('foo/bar', 'baz/boo'); 

foreach ($array as $xpath) { 
    $xpathResult = $xml->xpath($xpath); 
    echo $xpathResult[0]."\n"; 
} 

私は間違いなく上記の溶液を好むものの、既存のアレイを維持し、eval()を使用(およびWhen is eval evil in php?を読んで)可能性が

$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><root><foo><bar>foobar</bar></foo><baz><boo>bazboo</boo></baz></root>"); 
$array = array('$xml->foo->bar', '$xml->baz->boo'); 
foreach ($array as $xpath) { 
    echo eval("return $xpath;"); 
} 
+0

これはあなたが試すべきものです。 – dqhendricks

0

他の回答により示唆されるようにevalの必要はありません。次のようにしてください:

<? 
$x = 'hello'; 
$y = new StdClass; 
$z = 'y'; 
$y->hello = 'wes'; 
print $y->$x; 
print $z->$x; 
?> 
0

解決済み - 私自身のダムエラーです。私は別の場所で$ xml varをリセットしていたので、SimpleXMLオブジェクトの使用を無効にし、さらにeval()構文を少しオフにしました。私の質問とはまったく無関係なダム・エラー。申し訳ありません。

関連する問題