XML с атрибутами в массиве в PHPPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 XML с атрибутами в массиве в PHP

Сообщение Anonymous »

Я пытаюсь преобразовать строку XML в многомерный массив PHP. Трудности состоит в том, что XML поставляется с атрибутами и имеет вложенные значения. Мой код работает в данных родительского уровня, но я не уверен, как рекурсурсивно иметь дело с уровнями.
Item Value 1

Sub Value 1
Sub Value 2

Value 3
something value

< /code>
Это моя текущая функция для достижения этого: < /p>
$xmlString = 'Item Value 1Sub Value 1Sub Value 2Value 3something value';

function xmlToArray($xmlObject) {
$array = [];
foreach ($xmlObject as $item) {
// Convert attributes to an array
$attributes = (array)$item->attributes();
// Add the text value to the attributes array if it exists
$attributes['@value'] = trim((string)$item);
$key = (string)$item->getName();
if (isset($make_sub_array) && in_array($key, $make_sub_array)) {
$array[$key][] = $attributes;
}
elseif (isset($array[$key])) {
$make_sub_array[] = $key;
$tmp = $array[$key];
unset($array[$key]);
$array[$key][] = $tmp; //existing data
$array[$key][] = $attributes; //this data
}
else $array[$key] = $attributes;
}
return $array;
}
// Load the XML string into a SimpleXMLElement object
$xmlObject = simplexml_load_string($xmlString);
$array = xmlToArray($xmlObject);
exit(''.print_r($array,1).'');
< /code>
Полученная структура массива ниже, и мне нужна ваша помощь о том, как я могу обработать массив под вторым элементом. Я бы хотел, чтобы его обрабатывали так же, как и родительский: если имя элемента повторяется, оно будет включено как [], поэтому я получаю номер в качестве его родителя, в противном случае [itemname].
Спасибо < /p>
Array
(
[item] => Array
(
[0] => Array
(
[@attributes] => Array
(
[id] => 1
[name] => ItemOne
)
[@value] => Item Value 1
)
[1] => Array
(
[@attributes] => Array
(
[id] => 2
[name] => ItemTwo
)
[@value] =>
)
[2] => Array
(
[@attributes] => Array
(
[id] => 3
[name] => ItemThree
)

[@value] => Value 3
)
)
[something] => Array
(
[@value] => something value
)
)


Подробнее здесь: https://stackoverflow.com/questions/797 ... ray-in-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»