获取对象中的数组 xml (simplexml_load_string)

Get array in object xml (simplexml_load_string)

我有一个 $xml 看起来像这样

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Total] => 450
            [Count] => 4
            [Start] => 0
        )

    [Code] => 0
    [Item] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [Person.P_Id] => 14845
                )

            [1] => SimpleXMLElement Object
                (
                    [Person.P_Id] => 14844
                )

            [2] => SimpleXMLElement Object
                (
                    [Person.P_Id] => 14837
                )

            [3] => SimpleXMLElement Object
                (
                    [Person.P_Id] => 14836
                )

        )
)

现在我想让数组 Item 与另一个数组合并,但是当我尝试 $xml->Item 时,我只得到这个数组的第一个元素(即 14845 ).当我使用 count($xml->Item) 时,它 returns 是真实值(即 4)。我是不是弄错了整个数组 Item?

您没有说您是希望这些项目作为 SimpleXMLElements,还是只是 Person.P_Id 值。要获取对象,可以使用 xpath 获取数组:

$itemobjs = $xml->xpath('//Item');
print_r($itemobjs);

输出:

Array
(
    [0] => SimpleXMLElement Object
        (
            [Person.P_Id] => 14845
        )    
    [1] => SimpleXMLElement Object
        (
            [Person.P_Id] => 14844
        )    
    [2] => SimpleXMLElement Object
        (
            [Person.P_Id] => 14837
        )    
    [3] => SimpleXMLElement Object
        (
            [Person.P_Id] => 14836
        )    
)

如果您只想要 Person.P_Id 值,则可以使用 array_map:

迭代该数组
$items = array_map(function ($v) { return (string)$v->{'Person.P_Id'}; }, $itemobjs);
print_r($items);

输出:

Array
(
    [0] => 14845
    [1] => 14844
    [2] => 14837
    [3] => 14836
)

Demo on 3v4l.org