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

Что это — stdin, stdout и stderr?

Web

Как использовать стек WAMP?

Web

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

Web

Phpthumbon modx revo параметры. Компонент pThumb. Настройки

×