Consider the following code:
$string = \'
1234
root
Try This:
$array = json_decode(json_encode((array)$xml), TRUE);
Try this:
$string = '<device>
<id>1234</id>
<label>118</label>
<username>root</username>
<password>helloWorld</password>
<hardware>
<memory>4GB RAM</memory>
<storage_drives>
<storage_drive_1>2TB SATA 7,200RPM</storage_drive_1>
<storage_drive_2>1TB SATA 7,200RPM</storage_drive_2>
<storage_drive_3>Not Applicable</storage_drive_3>
<storage_drive_4>Not Applicable</storage_drive_4>
</storage_drives>
</hardware>
</device>';
$xml = json_decode(json_encode((array) simplexml_load_string($string)), 1);
This will output:
Array
(
[id] => 1234
[label] => 118
[username] => root
[password] => helloWorld
[hardware] => Array
(
[memory] => 4GB RAM
[storage_drives] => Array
(
[storage_drive_1] => 2TB SATA 7,200RPM
[storage_drive_2] => 1TB SATA 7,200RPM
[storage_drive_3] => Not Applicable
[storage_drive_4] => Not Applicable
)
)
)
or if you don't like this, you can use a PHP class like: http://www.bin-co.com/php/scripts/xml2array/
or view dfsq answer
Book Of Zeus code wrapped in function to make it work recursively:
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);
print_r(xml2array($xml));
Array
(
[id] => 1234
[label] => 118
[username] => root
[password] => helloWorld
[hardware] => Array
(
[memory] => 4GB RAM
[storage_drives] => Array
(
[storage_drive_1] => 2TB SATA 7,200RPM
[storage_drive_2] => 1TB SATA 7,200RPM
[storage_drive_3] => Not Applicable
[storage_drive_4] => Not Applicable
)
)
)