simplexmlelement simple pasar parser convertir convert array php arrays simplexml

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 ) ) )