Получить массив в объекте xml (simplexml_load_string) - PullRequest
0 голосов
/ 24 сентября 2019

У меня $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), он возвращает истинное значение (которое равно 4).Я сделал что-то не так, чтобы получить весь массив Item?

1 Ответ

1 голос
/ 24 сентября 2019

Вы не говорите, хотите ли вы элементы как 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
)

Демонстрация на 3v4l.org

...