0

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

4

2 回答 2

3

当您使用print_r

print_r( $xml->{'Power.AssetToAssetMapping'} );

SimpleXML 将神奇地在这里只提供第一个匹配元素。但是,从技术上讲,使用该值实际上是 a ,它允许您通过(或类似)基于零的整数索引SimpleXMLElement访问所有(以 a 形式Traversable)或特定的:ArrayAccess

$xml->{'Power.AssetToAssetMapping'}[1];

例如,这是<Power.AssetToAssetMapping>根元素下的第二个元素。

foreach ($xml->{'Power.AssetToAssetMapping'} as $element) {
    // each element
    print_r($element);
}

<Power.AssetToAssetMapping>例如,对根元素下的所有元素进行迭代,从第一个到最后一个。

请注意,此行为特定于SimpleXMLElement. 一个简单stdClass行为方式不同。

于 2012-12-13T04:54:51.247 回答
1

只需将 SimpleXMLElement 对象转换为数组;)

$xml = (array)$xml;
于 2012-12-13T04:47:53.460 回答