Из результата XPath в простой массив. Как я могу это сделать без использования foreach (или сканирования массива)

#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 выполняется цикл по каждому элементу в фоновом режиме.