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

NO IMAGE

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

$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