ぐぐると大抵こんな方法が出てきます
~~~
$object = simplexml_load_string($xml);
$arr = json_decode(json_encode($object), true);
~~~
PHP: simplexml_load_string – Manual
ところがこれ、重大な問題(バグ)ががが。。
~~~
$xml =<<
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 =<<
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
コメント