PHPのSimpleXMLのオブジェクトを配列に変換

ぐぐると大抵こんな方法が出てきます

~~~
$object = simplexml_load_string($xml);
$arr = json_decode(json_encode($object), true);
~~~

PHP: simplexml_load_string – Manual

ところがこれ、重大な問題(バグ)ががが。。

~~~
$xml =<<


1
テスト用商品 1
1050
1
1234567890101


2
テスト用商品 2
2100
1
1234567890102


XML;
$object = simplexml_load_string($xml);
$arr = json_decode(json_encode($object), true);

var_dump($arr);

array(1) {
[“item”]=>
array(2) {
[0]=>
array(5) {
[“itemId”]=>
string(1) “1”
[“itemName”]=>
string(20) “テスト用商品 1”
[“itemFee”]=>
string(4) “1050”
[“itemNumbers”]=>
string(1) “1”
[“itemJanCode”]=>
string(13) “1234567890101”
}
[1]=>
array(5) {
[“itemId”]=>
string(1) “2”
[“itemName”]=>
string(20) “テスト用商品 2”
[“itemFee”]=>
string(4) “2100”
[“itemNumbers”]=>
string(1) “1”
[“itemJanCode”]=>
string(13) “1234567890102”
}
}
}
~~~

~~~
$xml =<<


1
テスト用商品 1
1050
1
1234567890101


XML;

$object = simplexml_load_string($xml);
$arr = json_decode(json_encode($object), true);

var_dump($arr);

array(1) {
[“item”]=>
array(5) {
[“itemId”]=>
string(1) “1”
[“itemName”]=>
string(20) “テスト用商品 1”
[“itemFee”]=>
string(4) “1050”
[“itemNumbers”]=>
string(1) “1”
[“itemJanCode”]=>
string(13) “1234567890101”
}
}
~~~

はい、可変のxmlをAPIなどから受けると階層が変わっちゃうことがあります。。
PHPの関数的には何も悪くないんだけどこの使い方が間違ってるということですね

simplexml_load_stringからのobjectのままでもforeachは使えるので、そのまま使うのが吉でしょう( ´Д`)=3

コメント

タイトルとURLをコピーしました