0

フォーマットが次の場合、c はオブジェクト配列で、各反復で foreach する必要があります。

$a->b->c

そして私は:

$z = $a->b
foreach($z as $key => $value)
echo $value['field'];

有効な値があっても、$key は null として表示されます。オブジェクトの名前を取得するにはどうすればよいですか?

4

2 に答える 2

6

XML:

<a>
  <b>
    <c />
    <d />
    <e />
  </b>
</a>

PHPコード:

$xml = new SimpleXMLElement($file_url, true);
foreach($xml->b->children() as $node) {
    echo $node->getName() . "\n";
}

あなたに与えるだろう:

c
d
b

詳細については、 PHPのマニュアルを参照してください。

于 2009-10-06T20:18:26.877 に答える
2

次の XML の一部と、それを SimpleXML でロードするコードを検討してください。

$str = <<<XML
<root>
    <a>
        <b>
            <c>glop</c>
            <d>test</d>
        </b>
    </a>
</root>
XML;
$xml = simplexml_load_string($str);

$xml->a->b配列に「キャスト」して、反復できるようにすることができます。

foreach ((array)$xml->a->b as $name => $value) {
    echo "$name : $value<br />";
}

そして、次のような出力が得られます:

c : glop
d : test

(おそらくあなたのものとまったく同じ XML 文字列ではないかもしれませんが、これが解決策にたどり着くのに役立つことを願っています。そうであれば、質問を編集して、XML データと、取得したい出力を表示してもらえますか? )

配列への変換セクションで、マニュアルページを引用します。

オブジェクトが配列に変換される場合、結果は要素がオブジェクトのプロパティである配列になります。
キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数プロパティにはアクセスできません。プライベート変数には、変数名の前にクラス名が追加されています。保護された変数には、変数名の前に「*」が付加されます。

于 2009-10-06T20:07:43.263 に答える