@siroper

Многомерный SimpleXMLElement object в массив php — как?

Здравствуйте. Пытаюсь вывести многомерный SimpleXMLElement в массив. Использую функцию:

function xmlToArray($xml) {
	$xml = (array) $xml;

	if(empty($xml)) {
		return null;
	}

	foreach ($xml as $key=>$val) {
		if ($val instanceof SimpleXMLElement) {
			$xml[$key] = xmlToArray($val);
		} elseif (empty($val)) {
			$xml[$key] = null;
		}
	}

	return $xml;
}


Она помогает но только для первых уровней массива. Далее идет все тот-же SimpleXMLElement Object

Пример ответа (интеграция с crm, код xml идет по api).

Array
(
    [users] => Array
        (
            [@attributes] => Array
                (
                    [totalCount] => 10
                    [count] => 10
                )

            [user] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [id] => 5911138
                            [name] => Администратор площадки
                            [lastName] => SimpleXMLElement Object
                                (
                                )

                            [login] => Admin
                            [email] => space@site.ru
                            [jabber] => SimpleXMLElement Object
                                (
                                )


Т.е. первые 3 уровня при помощи вышеуказанной функции конвертировались в array, а остальные нет.
Как решить эту проблему?
  • Вопрос задан
  • 2444 просмотра
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Классическое решение прям с мануала:
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
которое имеет однако несколько побочных эффектов, например не видит [CDATA[ ]] ноды или видит как пустые элементы...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы