Я работаю с HTTP API, который выдает только данные в формате XML. Итак, сначала я загрузил его в SimpleXML и также был озадачен проблемой @attributes. Как я могу получить ценные данные, которые он содержит? print_r () смутило меня.
Мое решение состояло в том, чтобы создать массив и переменную итератора в 0. Перебрать объект SimpleXML с помощью foreach, получить данные с помощью метода attribues () и загрузить его. в мой созданный массив. Выполните итерацию до окончания цикла foreach.
Итак, print_r () перестал показывать это:
SimpleXMLElement Object
(
[@attributes] => Array
(
[ID] => 1
[First] => John
[Last] => Smith
)
)
В гораздо более пригодный для использования обычный массив. Это здорово, потому что я хотел быстро преобразовать массив в json, если это необходимо.
Мое решение в коде:
$obj = simplexml_load_string($apiXmlData);
$fugly = $obj->Deeply->Nested->XML->Data->Names;
$people = array();
$i = 0;
foreach($fugly as $val)
{
$people[$i]['id'] += $val->attributes()->ID;
$people[$i]['first'] = "". $val->attributes()->First;
$people[$i]['last'] = "". $val->attributes()->Last;
$i++;
}
Быстрая заметка: функция settype () в PHP является странной / ошибочной, поэтому я добавил + , чтобы убедиться, что ID является целым числом , и добавил кавычки чтобы убедиться, что имя строка . Если нет какого-либо преобразования переменных, вы будете загружать объекты SimpleXML в созданный вами массив.
Окончательный результат print_r ():
Array
(
[0] => Array
(
[id] => 1
[first] => John
[last] => Smith
)
[1] => Array
(
[id] => 2
[first] => Jane
[last] => Doe
)
)