我遇到了PHP和对象密钥访问的问题。
我有一个SimpleXMLElement,它返回一个包含11个SimpleXMLElements的数组,如下所示:
SimpleXMLElement Object
(
[Power.AssetToAssetMapping] => Array
(
[0] => SimpleXMLElement Object
(
[AssetToAssetMappingID] => 36063
[Supplier_x0020_Asset_x0020_Type] => Powerstrip
[..etc..]
当我尝试使用大括号隔离数组时,我只看到数组的第一条记录。其他10个永远不会输出:
print_r( $xml->{'Power.AssetToAssetMapping'} );
当我使用整个对象时,我会看到所有11条记录:
print_r( $xml );
是否有其他方法可以访问此对象的第一个子节点?我可以预测$ xml中返回的对象的每个子节点,并且很好地获取每个元素,但看起来这是PHP中的一个错误。
答案 0 :(得分:3)
使用print_r
:
print_r( $xml->{'Power.AssetToAssetMapping'} );
SimpleXML在这里只会神奇地提供第一个匹配元素。但是,从技术上讲,使用该值实际上是SimpleXMLElement
,允许您访问所有(以Traversable
的形式)或特定的一个(或类似于)ArrayAccess
从零开始的整数索引:
$xml->{'Power.AssetToAssetMapping'}[1];
例如,它是根元素下的第二个<Power.AssetToAssetMapping>
元素。
foreach ($xml->{'Power.AssetToAssetMapping'} as $element) {
// each element
print_r($element);
}
例如,迭代结果是根元素下的所有<Power.AssetToAssetMapping>
元素,从头到尾。
请注意此行为特定于SimpleXMLElement
。一个简单的stdClass
使不的行为方式相同。
答案 1 :(得分:1)
只需将SimpleXMLElement对象转换为数组;)
$xml = (array)$xml;