3v4l.org

run code in 300+ PHP versions simultaneously
<?php class XmlToArray { public function __construct() {} function xml2array($xml) { if (is_string($xml)) { $dom = new \DOMDocument; $v = $dom->loadXml($xml); if(!$v) {return false;} } return $this->_process($dom); } function _process($node) { $occurance = array(); $result = ""; if(isset($node->childNodes)) { foreach($node->childNodes as $child) { $occurance[$child->nodeName] = isset($occurance[$child->nodeName]) ? $occurance[$child->nodeName] + 1 : 1; } } if($node->nodeType == XML_TEXT_NODE) { $result = html_entity_decode(htmlentities($node->nodeValue, ENT_COMPAT, 'UTF-8'), ENT_COMPAT,'ISO-8859-15'); } else if($node->nodeType == XML_CDATA_SECTION_NODE){ $result = $node->nodeValue; } else { if($node->hasChildNodes()){ $children = $node->childNodes; for($i=0; $i<$children->length; $i++) { $child = $children->item($i); if ($child->nodeName == '#text' || $child->nodeName == '#cdata-section') { $text = $this->_process($child); if (trim($text) != '') { $result['#data'] = $this->_process($child); } } else { $result[$child->nodeName][] = $this->_process($child); } } } if($node->hasAttributes()) { $attributes = $node->attributes; if(!is_null($attributes)) { foreach ($attributes as $key => $attr) { $result["@".$attr->name] = $attr->value; } } } } return $result; } }

preferences:
32.71 ms | 402 KiB | 5 Q