Convert SimpleXML Object into PHP Array
Web Services are very useful when we need to send and receive information from third-party clients. These Web Services, generally, output or return the response in an XML format.
XML can be easily parsed in PHP using the simplexml_load_string or the SimpleXMLElement object. Now, manipulating this object can be sometime painful.
The solution: converting this object in an array. Here's two examples on how to convert this:
Let's say we have this xml:
<monitor>
<manufacturer>Samsung</manufacturer>
<model>XL30</model>
<display>
<screen_size>30</screen_size>
<resolution>2560x1600</resolution>
<brightness>200</brightness>
<contrast_ratio>1000:1</contrast_ratio>
<response_time>6</response_time>
<viewing_angle_h>178</viewing_angle_h>
<viewing_angle_v>178</viewing_angle_v>
<colour_supported>16.7</colour_supported>
<colour_supported_metric>M</colour_supported_metric>
</display>
</monitor>
Solution #1
function xml2array($xml) {
$arr = array();
foreach ($xml as $element) {
$tag = $element->getName();
$e = get_object_vars($element);
if (!empty($e)) {
$arr[$tag] = $element instanceof SimpleXMLElement ? xml2array($element) : $e;
}
else {
$arr[$tag] = trim($element);
}
}
return $arr;
}
$xml = new SimpleXMLElement($string);
Solution #2
$xml = json_decode(json_encode((array) simplexml_load_string($string)), 1);
This will print out the following code using both solutions:
Array ( [manufacturer] => Samsung [model] => XL30 [display] => Array ( [screen_size] => 30 [resolution] => 2560x1600 [brightness] => 200 [contrast_ratio] => 1000:1 [response_time] => 6 [viewing_angle_h] => 178 [viewing_angle_v] => 178 [colour_supported] => 16.7 [colour_supported_metric] => M ) )




