Let's use a piece of code to reproduce the problem.
At first glance, the result is puzzling:
Copy Code code as follows:
<?php
$string = <<<eof
<data>
<foo><bar>hello</bar></foo>
<foo><bar>world</bar></foo>
</data>
EOF;
$data = simplexml_load_string ($string);
Print_r ($data);
Print_r ($data->foo);
?>
At first glance, the result is puzzling:
Copy Code code as follows:
SimpleXMLElement Object
(
[foo] => Array
(
[0] => simplexmlelement Object
(
[Bar] => Hello
)
[1] => simplexmlelement Object
(
[Bar] => World
)
)
)
SimpleXMLElement Object
(
[Bar] => Hello
)
Obviously Print_r shows Foo is an array of two bar elements, but it only shows a bar element at the end!
The reason is actually very simple, in the result of the simplexml_load_string as shown above, Foo is not an array, but an iterative object!
You can confirm this:
Copy Code code as follows:
foreach ($data->foo as $v) Print_r ($v);
foreach ($data->children () as $v) Print_r ($v);
It seems that the appearance of Print_r or var_dump is not entirely believable, and pay more attention to it.