Рекурсивное преобразование из SimpleXMLObject в массив

Мне нужно рекурсивно передать PHP SimpleXMLObject в массив. Проблема в том, что каждый дополнительный элемент также является элементом PHP SimpleXMLElement.

Это возможно?

Related of "Рекурсивное преобразование из SimpleXMLObject в массив"

json_decode(json_encode((array) simplexml_load_string($obj)), 1); 

Не тестировал это, но, похоже, это делается:

 function convertXmlObjToArr($obj, &$arr) { $children = $obj->children(); foreach ($children as $elementName => $node) { $nextIdx = count($arr); $arr[$nextIdx] = array(); $arr[$nextIdx]['@name'] = strtolower((string)$elementName); $arr[$nextIdx]['@attributes'] = array(); $attributes = $node->attributes(); foreach ($attributes as $attributeName => $attributeValue) { $attribName = strtolower(trim((string)$attributeName)); $attribVal = trim((string)$attributeValue); $arr[$nextIdx]['@attributes'][$attribName] = $attribVal; } $text = (string)$node; $text = trim($text); if (strlen($text) > 0) { $arr[$nextIdx]['@text'] = $text; } $arr[$nextIdx]['@children'] = array(); convertXmlObjToArr($node, $arr[$nextIdx]['@children']); } return; } 

Взято с http://www.codingforums.com/showthread.php?t=87283

Возможно. Это рекурсивная функция, которая печатает теги родительских элементов и теги + содержимое элементов, у которых больше детей. Вы можете изменить его для построения массива:

 foreach( $simpleXmlObject as $element ) { recurse( $element ); } function recurse( $parent ) { echo '<' . $parent->getName() . '>' . "\n"; foreach( $parent->children() as $child ) { if( count( $child->children() ) > 0 ) { recurse( $child ); } else { echo'<' . $child->getName() . '>'; echo iconv( 'UTF-8', 'ISO-8859-1', $child ); echo '</' . $child->getName() . '>' . "\n"; } } echo'</' . $parent->getName() . '>' . "\n"; } 

Я не вижу смысла, поскольку SimpleXMLObject можно создавать так же, как и массивы …

Но если вам это действительно нужно, просто проверьте ответы на эту тему или этот пост на форуме.