PHP Convert SimpleXML object to Array
In PHP, if you want to convert your xml data to array for looping and displaying purpose, it sometimes becomes tedious. If you already have a SimpleXML class and want to convert XML to Array without any notices, warnings and recursively preparing the array, here is the method that will do so without any modifications needed. This will work by pasting this in your class file, if you are not using object oriented approach, you will have to remove “public” and “$this->” from this function.
public function simpleXMLToArray(SimpleXMLElement $xml,$attributesKey=null,$childrenKey=null,$valueKey=null){ | |
if($childrenKey && !is_string($childrenKey)){$childrenKey = '@children';} | |
if($attributesKey && !is_string($attributesKey)){$attributesKey = '@attributes';} | |
if($valueKey && !is_string($valueKey)){$valueKey = '@values';} | |
$return = array(); | |
$name = $xml->getName(); | |
$_value = trim((string)$xml); | |
if(!strlen($_value)){$_value = null;}; | |
if($_value!==null){ | |
if($valueKey){$return[$valueKey] = $_value;} | |
else{$return = $_value;} | |
} | |
$children = array(); | |
$first = true; | |
foreach($xml->children() as $elementName => $child){ | |
$value = $this->simpleXMLToArray($child,$attributesKey, $childrenKey,$valueKey); | |
if(isset($children[$elementName])){ | |
if(is_array($children[$elementName])){ | |
if($first){ | |
$temp = $children[$elementName]; | |
unset($children[$elementName]); | |
$children[$elementName][] = $temp; | |
$first=false; | |
} | |
$children[$elementName][] = $value; | |
}else{ | |
$children[$elementName] = array($children[$elementName],$value); | |
} | |
} | |
else{ | |
$children[$elementName] = $value; | |
} | |
} | |
if($children){ | |
if($childrenKey){$return[$childrenKey] = $children;} | |
else{$return = array_merge($return,$children);} | |
} | |
$attributes = array(); | |
foreach($xml->attributes() as $name=>$value){ | |
$attributes[$name] = trim($value); | |
} | |
if($attributes){ | |
if($attributesKey){$return[$attributesKey] = $attributes;} | |
else{$return = array_merge($return, $attributes);} | |
} | |
return $return; | |
} |
Hope this helps.
Leave a comment
Welcome to my Blog
Certifications
Honor
Recognition
Contributions
Categories
- Apache (2)
- ChatGPT (1)
- Domain name (2)
- eCommerce (2)
- htaccess (1)
- Humor (3)
- Instagram API (1)
- jQuery (4)
- JSON (1)
- Linux (10)
- Magento (142)
- Magento admin (58)
- Magento Certification (5)
- Magento error (13)
- Magento frontend (68)
- Magento Imagine (2)
- Magento Interview (5)
- Magento Master (2)
- Magento2 (10)
- Mobile (1)
- MySQL (7)
- OpenAI (1)
- OroCRM (2)
- Performance (2)
- PHP (8)
- Prototype JS (3)
- Security (4)
- Wordpress (3)
- XML (2)
Tag Cloud
500 internal server error admin answers attribute bug category checkbox checkout cookie customer difference domain name EAV error event extension interview invoice jquery linux magento magento2 magento admin magento error magento interview questions magento orm mysql observer order pinterest product products questions redirect register remove script session simplexml to array state status study guide tax url wordpress