#php #xml #xpath
#php #xml #xpath
Вопрос:
Используя этот запрос:
$xml->xpath( "/root/label//@name" );
Я получаю этот массив:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => Pippo
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => Caio
)
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => Sempronio
)
)
Как я могу получить массив с этим выводом:
Array
(
[0] => Pippo
[1] => Caio
[2] => Sempronio
)
Спасибо.
Комментарии:
1. без использования foreach (или сканирования массива) я думаю, что там в углу есть волшебная палочка
Ответ №1:
Вы могли бы просто преобразовать каждый элемент в строку через array_map
:
$elements = $xml->xpath('/root/label//@name');
$names = array_map(fn(SimpleXMLElement $element) => (string) $element, $elements);
Или с PHP <7.4:
$elements = $xml->xpath('/root/label//@name');
$names = array_map(function (SimpleXMLElement $element) {
return (string) $element;
}, $elements);
Обратите внимание, что array_map
выполняется цикл по каждому элементу в фоновом режиме.