Почему после преобразования xml в JSON пропадают атрибуты
Есть xml файл такого содержания (привожу часть кода):
<categories>
<category id="336085411">НОВИНКИ</category>
<category id="335086611">ВСЕ ТОВАРЫ</category>
<category id="122129011">ПОСТЕЛЬНОЕ БЕЛЬЕ</category>
<category id="341320011" parentId="122129011">КПБ НА РЕЗИНКЕ</category>
</categories>
И выполняю преобразование его в json следующим кодом:
$array = json_decode(json_encode( (array) simplexml_load_string($dataXML) ), 1);
В итоге я получаю такой массив:
0: НОВИНКИ
1: ВСЕ ТОВАРЫ
2: ПОСТЕЛЬНОЕ БЕЛЬЕ
3: КПБ НА РЕЗИНКЕ
А хотелось бы чтобы ключ массива равнялся id (category id)
Как возможно это реализовать?
Ответы (1 шт):
Автор решения: teran
→ Ссылка
сами по себе атрибуты не станут ключами массива, его следует собрать вручную, обойдя узлы.
примерно так
$xml = simplexml_load_string($txt);
$result = [];
foreach($xml as $c){
$id = (int) $c['id'];
$result[$id] = (string) $c;
}
формально в вашем фрагменте кода при кодировании в json происходит что-то вида array_map($fn($c) => (string) $c) что на выходе дает просто текстовые значения узлов. Потом уже это кодируется в json и декодируется в массив. так что атрибутам тут появится неоткуда.