La conversion d'un Objet SimpleXML pour un Tableau

Je suis tombé sur cette fonction de conversion d'un Objet SimpleXML pour un tableau ici:

/**
 * function object2array - A simpler way to transform the result into an array 
 *   (requires json module).
 *
 * This function is part of the PHP manual.
 *
 * The PHP manual text and comments are covered by the Creative Commons 
 * Attribution 3.0 License, copyright (c) the PHP Documentation Group
 *
 * @author  Diego Araos, diego at klapmedia dot com
 * @date    2011-02-05 04:57 UTC
 * @link    http://www.php.net/manual/en/function.simplexml-load-string.php#102277
 * @license http://www.php.net/license/index.php#doc-lic
 * @license http://creativecommons.org/licenses/by/3.0/
 * @license CC-BY-3.0 <http://spdx.org/licenses/CC-BY-3.0>
 */
function object2array($object)
{
    return json_decode(json_encode($object), TRUE); 
}

Donc mon adoption d'une des chaînes XML est comme:

function xmlstring2array($string)
{
    $xml   = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA);

    $array = json_decode(json_encode($xml), TRUE);

    return $array;
}

Il fonctionne très bien, mais il semble un peu hacky? Est-il plus efficace/bon moyen de faire cela?

Je sais que l'Objet SimpleXML est assez proche d'un tableau car il rend l'utilisation de l'interface ArrayAccess en PHP mais ça ne fonctionne toujours pas grand pour l'utiliser comme un tableau avec des multi-dimensions des tableaux c'est à dire en boucle.

Merci à tous pour toute l'aide

  • Quelle est la raison? Est-il en boucle? Parce que dans ce cas, vous devriez être en mesure de boucle de parties de l'objet SimpleXMLElement sans aucun problème. Par exemple, si vous êtes l'analyse d'un flux ATOM avec SimpleXML vous seriez en mesure de faire ce qui suit: foreach($xml->entry as $entry) et ensuite accéder à $entry->title et.c. à partir de l'intérieur de la boucle.
  • Notez que l'ajout d' (array) à la ci-dessus (c'est à dire @json_decode(@json_encode((array)$simple_xml_object ), 1);) comme indiqué dans un commentaire plus tard dans le manuel PHP peut provoquer Node no longer exists erreurs.
  • c'est quoi cette question? json_encode ne l'arbre transversal sur l'élément simplexml. De quoi vous attendiez-vous différemment? Comment définissez-vous "un peu hacky"? Ce n'est pas robuste avec cette approche dans vos yeux? Ce n'est pas efficace?
  • Cette question est clair pour moi, donc je vous recommande de le rouvrir.
InformationsquelleAutor Abs | 2011-05-29