0

次の構造を持つ XML を解析しようとしています (2 つの形式が示されていますが、どちらも有効です)。

<xml-structure>
    <parent-group>
        <child>
            <element1>Some Data</element1>
            <element2>Some Data</element2>
        </child>
    </parent-group>
</xml-structure>

<xml-structure>
    <parent-group>
        <child>
            <element1>Some Data</element1>
            <element2>Some Data</element2>
        </child>
        <child>
            <element1>Some Data</element1>
            <element2>Some Data</element2>
        </child>
    </parent-group>
</xml-structure>

以下は、この構造全体を連想配列に取得し、データを調べるために使用されます。

$arr = json_decode(json_encode((array) simplexml_load_string($xml)),1);
$children = $arr['parent-group']['child'];

子を繰り返し処理してデータを確認したいのですが、次の方法は子が複数ある場合にのみ機能します。

foreach($children as $child) {
    echo $child['element1'];
}

子が 1 つしかない場合、次のことが成り立つため、これは機能しません。

$children === {'element1' => 'Some Data', 'element2' => 'Some Data'}

複数の子があるかどうかを事前に知らなくても、$children常に配列 (おそらくサイズ 1) になるようにするにはどうすればよいですか?

4

1 に答える 1

0

私は次のことをすることになりました-誰かがより良い解決策を持っているかどうか興味があります:

$children = $arr['parent-group']['child'];
if (!empty($children['element1'])) {
    $children = array($children);
}

これが行わ$childrenれると、常に子の配列になり、次の行が正しく実行されるようになります。

于 2012-06-26T15:59:13.833 に答える