pasar - simplexml object php
¿Cómo convertir SimpleXMLObject a PHP Array? (3)
Prueba esto:
$array = json_decode(json_encode((array)$xml), TRUE);
Considere el siguiente código:
$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 = new SimpleXMLElement($string);
$deviceDetails = Array();
foreach($xml as $element){
$tag = $element->getName();
$deviceDetails += Array($tag => ''$element->$tag)'',
);
}
La matriz de salida $detailsDetails
es la siguiente:
Array
(
[id] => $element->$tag)
[label] => $element->$tag)
[username] => $element->$tag)
[password] => $element->$tag)
[hardware] => $element->$tag)
)
Cuál está mal.
Mi pregunta es, ¿cómo hacer que $element->$tag
funcione?
Prueba esto:
$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);
Esto dará como resultado:
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
)
)
)
o si no te gusta esto, puedes usar una clase de PHP como: http://www.bin-co.com/php/scripts/xml2array/
o ver respuesta dfsq
El código de Book Of Zeus incluye una función para que funcione de forma recursiva:
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
)
)
)