Web

Использование цикла для SimpleXML с помощью foreach в php

Я пытаюсь передать значения массива в следующий объект SimpleXMLElement, чтобы получить значения [property], но я не уверен, как лучше всего пройтись циклом по этому объекту с помощью foreach в PHP,

Полученный объектный код:

SimpleXMLElement Object (

    [nowplaying-info] => Array (

            [0] => SimpleXMLElement Object (

                    [@attributes] => Array (

                            [mountName] => KDLDFMAAC

                            [timestamp] => 1621880102

                            [type] => track

                        )

                    [property] => Array (

                            [0] => 248000

                            [1] => 1621880102606

                            [2] =>    LOS ANGELES AZULES FT PEPE AGILAR

                            [3] => 97008

                            [4] => NI CONTIGO NI SIN TI

                        )

                )

            [1] => SimpleXMLElement Object (

                    [@attributes] => Array (

                            [mountName] => KDLDFMAAC

                            [timestamp] => 1621879804

                            [type] => track

                        )

                    [property] => Array (

                            [0] => 185000

                            [1] => 1621879804060

                            [2] => FITO OLIVARES

                            [3] => 97754

                            [4] => JUANA LA CUBANA

                        )

                )

 

            [2] => SimpleXMLElement Object (

                    [@attributes] => Array (

                            [mountName] => KDLDFMAAC

                            [timestamp] => 1621879192

                            [type] => track

                        )

                    [property] => Array (

                            [0] => 252000

                            [1] => 1621879192436

                            [2] => CHON ARAUZA

                            [3] => 97076

                            [4] => UN MONTON DE ESTRELLAS

                        )

                )

        )

)

 

Не могли бы вы помочь найти более лучший способ создания цикла внутри этого объекта?

 

Ответ 1

Возможно, вам подойдет следующий вариант:

$properties = [];

$xml = simplexml_load_string($xmlString);

foreach($xml->{'nowplaying-info'} as $item) {

    // свойство массива $item->property

    $properties[] = $item->property;

}

 

Если это все, что вам нужно, то можно объединить результаты

 $result = array_column($xml->{'nowplaying-info'}, 'property').

 

Ответ 2

В этом примере, преимущество в одной строчке, лучше не найдешь :)

Возвращает массив на объект XMLElement:

array_map(function ($param) {

                    return next($param);

                }, current((new

SimpleXMLElement(file_get_contents('newXMLDocument.xml')))->children()))

 

Предполагая, что XML-файл выглядит так:

<?xml version="1.0" standalone="yes"?>

<nowplaying-info-list>

    <nowplaying-info mountName="KDLDFMAAC" timestamp="1621880102" type="track">

        <property>248000</property>

        <property>1621880102606</property>

        <property>LOS ANGELES AZULES FT PEPE AGILAR</property>

        <property>97008</property>

        <property>NI CONTIGO NI SIN TI</property>

    </nowplaying-info>

    <nowplaying-info mountName="KDLDFMAAC" timestamp="1621879804" type="track">

        <property>185000</property>

        <property>1621879804060</property>

        <property>FITO OLIVARES</property>

        <property>97754</property>

        <property>JUANA LA CUBANA</property>

    </nowplaying-info>

    <nowplaying-info mountName="KDLDFMAAC" timestamp="1621879192" type="track">

        <property>252000</property>

        <property>1621879192436</property>

        <property>CHON ARAUZA</property>

        <property>97076</property>

        <property>UN MONTON DE ESTRELLAS</property>

    </nowplaying-info>

</nowplaying-info-list>

 

Если же вам необходимо сбросить результат

echo nl2br(print_r(array_map(function ($param) {

                    return next($param);

                }, current((new SimpleXMLElement(file_get_contents('newXMLDocument.xml')))->children())), true));

Схожие статьи

Web

Как я могу хранить и извлекать изображения из базы данных MySQL с помощью PHP

Web

Использование файла .php для создания дампа MySQL

Краткая инструкция, как заливать на Github коды собственных программ
Web

Краткая инструкция, как заливать на Github коды собственных программ

Web

Извлечение данных из JSON с помощью PHP

×