我有以下代码段未达到我的期望:
var_dump($pronunciationResults);
$alignEntries = $pronunciationResults->alignEntry;
var_dump($alignEntries);
哪个会生成第一个var_dump(我已经删除了结构的末尾):
object(SimpleXMLElement)#1371 (1) {
["alignEntry"]=>
array(123) {
[0]=>
object(SimpleXMLElement)#1375 (3) {
["@attributes"]=>
array(1) {
["alignType"]=>
string(2) "OK"
}
["target"]=>
string(3) "The"
其次是第二个var_dump的输出
object(SimpleXMLElement)#1373 (3) {
["@attributes"]=>
array(1) {
["alignType"]=>
string(2) "OK"
}
["target"]=>
string(3) "The"
我有一个非常简单的php程序,可以完全按预期工作,并且不知道为什么在这种情况下我得到了数组的第一个元素,而不是数组本身。
因此,@ trincot下面的评论很有趣。但是:
var_dump($pronunciationResults->children());
var_dump($pronunciationResults->children()->alignEntry);
var_dump($pronunciationResults->alignEntry->children());
为每个var_dump提供与上述完全相同的结构。
事实证明,即使var_dump并未将其显示为数组,foreach也会遍历原始alignEntries数组。
我不知道var_dump发生了什么
答案 0 :(得分:2)
您的对象不是标准对象。您应该使用适当的API来使用它们。如果是SimpleXMLElement
的实例,则可以通过方法children()
获取children数组:
foreach ($pronunciationResults->children() as $child) {
var_dump($child);
}
当然,由于这些子元素也是SimpleXMLElement
类的子元素,因此您还应该通过适当的方法来对待它们。因此,如果您想遍历它们的属性,请对它们调用attributes()
方法,等等。
除了课程之外,不要专注于在var_dump
中看到的内容。您会看到未记录的属性,这些属性不应直接使用。坚持那些对象的文档化接口。