无法访问名称中包含句点的PHP对象字段

时间:2012-12-13 03:40:31

标签: php simplexml stdclass

我遇到了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中的一个错误。

2 个答案:

答案 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;