Я пытаюсь передать значения массива в следующий объект 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