Answer the question
In order to leave comments, you need to log in
How to convert a piece of XML into a PHP associative array?
There is an XML file about 1 GB in size, which will probably increase in the future. In this XML, certain blocks need to be processed. Now I'm trying to make transformations to an array using XMLReader, but I can't figure out how to bypass nesting, that is, it's not stupid to write
$reader->read();
$var = $reader->localName;
$reader->read();
....
<Свойства>
<Свойство>
<Ид>b27961ab-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Наименование для сайта</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961ad-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Тип</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>8f864cca-c3ee-11e9-b6d2-00016cd99202</ИдЗначения>
<Значение>Люстры</Значение>
</Справочник>
<Справочник>
<ИдЗначения>6716ce9d-c4a6-11e9-b953-f44d3076153a</ИдЗначения>
<Значение>Настенные</Значение>
</Справочник>
<Справочник>
<ИдЗначения>d8a3c853-c4ba-11e9-b953-f44d3076153a</ИдЗначения>
<Значение>Напольные</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961ae-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Стиль</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>671e0b69-f7ac-11e3-8d3f-002522cd5395</ИдЗначения>
<Значение>Современные</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c5b-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Лофт</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961af-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Производитель</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>671e0b68-f7ac-11e3-8d3f-002522cd5395</ИдЗначения>
<Значение>Лунный Свет (Испания)</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b0-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Серия (групировка по арт.)</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b1-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Фото 1</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b2-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Фото 2</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b3-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Фото 3</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b4-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Фото 4</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b5-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Фото 5</Наименование>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b6-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Рекомендуемая площадь освещённости</Наименование>
<ТипЗначений>Число</ТипЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b7-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Тип ламп</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>671e0b6c-f7ac-11e3-8d3f-002522cd5395</ИдЗначения>
<Значение>Светодиодные</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c6a-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Е14</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c6b-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Е27</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961b8-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Количество ламп (шт)</Наименование>
<ТипЗначений>Число</ТипЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961ba-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Цвет арматуры_1</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>663f9c72-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Белый</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c7c-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Коричневый</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c73-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Хром</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c76-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Золото</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961bb-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Цвет плафона_1</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>c9f4043f-f832-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Прозрачный</Значение>
</Справочник>
<Справочник>
<ИдЗначения>671e0b70-f7ac-11e3-8d3f-002522cd5395</ИдЗначения>
<Значение>Белый</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961bc-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Цвет аксессуаров</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>c9f40458-f832-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Прозрачный</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961bd-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Тип крепежа</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>671e0b6b-f7ac-11e3-8d3f-002522cd5395</ИдЗначения>
<Значение>Планка</Значение>
</Справочник>
<Справочник>
<ИдЗначения>663f9c68-f82d-11e3-b27a-002522cd5395</ИдЗначения>
<Значение>Корпусом</Значение>
</Справочник>
</ВариантыЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
<Свойство>
<Ид>b27961be-f7a3-11e3-8d3f-002522cd5395</Ид>
<Наименование>Высота подвеса (мм)</Наименование>
<ТипЗначений>Число</ТипЗначений>
<ДляТоваров>true</ДляТоваров>
</Свойство>
</Свойства>
Answer the question
In order to leave comments, you need to log in
The most primitive way is to use the json_encode-json_decode bundle
$obj = simplexml_load_file('test.xml');
// или (смотря что у вас на входе - файл или строка) $obj = simplexml_load_string($text);
$json = json_encode($obj);
$array = json_decode($json, true);
It is not very clear what you need to get in the end.
I can advise you to parse thick XML files using Symfony DOMCrawler . If you don’t fit in from memory, you can use the approach like here: Hybrid XML Parser .
Use recursion.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question