Для преобразования XML в массив в PHP с сохранением всех атрибутов, можно использовать функцию `simplexml_load_string`, которая позволяет работать с XML, а затем преобразовать его в массив. В процессе конвертации атрибуты и текст содержимого элемента можно сохранить в виде отдельных ключей.
Вот пример того, как можно реализовать такую конвертацию:
```php
function xmlToArray($xml) {
// Проверяем, что $xml является объектом SimpleXMLElement
if (!($xml instanceof SimpleXMLElement)) {
$xml = simplexml_load_string($xml);
}
// Инициализируем массив
$array = [];
// Извлекаем атрибуты
if ($xml->attributes()) {
$array['@attributes'] = [];
foreach ($xml->attributes() as $attr => $value) {
$array['@attributes'][$attr] = (string)$value;
}
}
// Извлекаем текстовое содержимое
if ($xml->count() === 0) {
// Если у элемента нет дочерних узлов, берем текст
$array['@text'] = (string)$xml;
} else {
// Если есть дочерние узлы, рекурсивно преобразуем их в массив
foreach ($xml->children() as $child) {
$array[] = xmlToArray($child);
}
}
return $array;
}
// Пример XML
$xmlString = '<image tag="plan">http://example.ru/photo/pid/BE72ABD7</image>';
// Преобразуем XML в массив
$resultArray = xmlToArray($xmlString);
// Вывод результата
print_r($resultArray);
```
### Объяснение кода:
1. **Функция xmlToArray**: Эта функция принимает строку XML или объект SimpleXMLElement и создает соответствующий массив.
2. **Проверка и загрузка XML**: Если входной параметр не является объектом `SimpleXMLElement`, он будет загружен с помощью `simplexml_load_string`.
3. **Извлечение атрибутов**: Если у элемента есть атрибуты, они добавляются в массив под ключом `@attributes`.
4. **Извлечение текста**: Если элемент не имеет дочерних узлов, его текст сохраняется под ключом `@text`. Если дочерние узлы есть, рекурсивно вызывается функция для каждого дочернего узла.
5. **Печать результата**: Функция `print_r` используется для отображения полученного массива.
Таким образом, в результате вы получите массив, который будет содержать все атрибуты и текстовые данные из вашего XML.