PHP访问SimpleXMLElement包含的数组时的疑问
问题原因与解决方案
这是SimpleXMLElement的特殊设计导致的,同时和print_r的输出特性有关,核心逻辑如下:
SimpleXMLElement的属性访问规则
当你直接通过$r1->response访问时,它默认只返回第一个匹配到的子元素 。这是SimpleXMLElement为简化单个元素访问做的设计,它本质是伪对象,属性访问由魔术方法实现,并非真实数组。print_r的特殊显示逻辑
print_r对SimpleXMLElement对象做了特殊处理:当输出父元素$r1时,会把所有同名子元素(这里是4个)以数组形式展示,让你误以为$r1->response是数组,但实际上它并不是。 foreach能遍历全部元素的原因
SimpleXMLElement实现了迭代器接口,当用foreach遍历$r1->response时,它会自动切换到迭代模式,遍历所有同名的子元素,因此能正确获取全部4个元素的statusCode值。
解决方法:获取所有元素为真实数组
如果需要把所有iterator_to_array()方法:
$r2 = iterator_to_array($r1->response); print_r($r2); // 此时会显示包含4个元素的完整数组
或者手动遍历收集:
$responses = []; foreach ($r1->response as $resp) { $responses[] = $resp; } print_r($responses);
内容的提问来源于stack exchange,提问作者George Kourtis
相关产品推荐
相关产品推荐

