@Dimas123

Как избавиться от @attributes?

Я получил данные $data с помощью функции simplexml_load_file, вот так если вывести данные print_r($data):

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Id] => 123
            [name] => Иван
)
)


Делаю echo $data[id]; и выводится id, я могу его даже проверить если id == 123, то и это срабатывает.

Но как только я начинаю делать другие операции, то ошибка это не простое значение, я проверяю

print_r($data[id]); и правда объект:

SimpleXMLElement Object
(
    [0] => 123
)


Как мне от этого избавиться? Мне нужен простой человеческий массив:

Array
        (
            [Id] => 123
            [name] => Иван
)
  • Вопрос задан
  • 276 просмотров
Решения вопроса 1
@Dimas123 Автор вопроса
В документации нашел такую функцию, которая решила проблему и как я понял можно просто писать (string) и это вернет мне только значение без объекта
function xml_attribute($object, $attribute)
{
    if(isset($object[$attribute]))
        return (string) $object[$attribute];
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
<?php

function xml_to_array($xmlstring)
{
  $xml = simplexml_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);

  return json_decode(json_encode($xml), true);
}

var_dump(xml_to_array('<foo><bar baz="true">123</bar></foo>'));


array(1) {
  ["bar"]=>
  string(3) "123"
}
Ответ написан
Комментировать
@entermix
Почему Вы с объектом работаете как с массивом?

stackoverflow.com/questions/6167279/converting-a-s...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы