web-dev-qa-db-fra.com

SimpleXMLElement à PHP Tableau

La variable $d provient de la fonction file_get_contents en une URL.

$answer = @new SimpleXMLElement($d);

Ci-dessous se trouve la sortie de la print_r($answer):

SimpleXMLElement Object
(
  [Amount] => 2698
  [Status] => OK
  [State] => FL
  [Country] => USA
)

Comment puis-je récupérer la valeur de chaque élément et l'ajouter à un tableau? Je ne peux pas comprendre.

19
Codex73

Le $answer peut déjà fonctionner comme un tableau. Vous pouvez le faire si vous voulez le mettre dans un vrai tableau,

$array = array();
foreach($answer as $k => $v) {
  $array[$k] = $v;
}
10
ZZ Coder

Dans ce cas simple, le casting fonctionnera également:

$my_array = (array)$answer
45
dkinzer

Cela devrait fonctionner:

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

J'ai un problème avec cette fonction car la conversion de chaque enfant XML dans un tableau peut poser problème lorsque le texte se situe entre des balises CDATA.

J'ai corrigé cela en vérifiant si le résultat de la conversion de typage dans un tableau est vide. Si c'est le cas, convertissez-le en chaîne et vous obtiendrez un résultat correct. 

Voici ma version modifiée avec le support CDATA:

function SimpleXML2ArrayWithCDATASupport($xml)
{   
    $array = (array)$xml;

    if (count($array) === 0) {
        return (string)$xml;
    }

    foreach ($array as $key => $value) {
        if (!is_object($value) || strpos(get_class($value), 'SimpleXML') === false) {
            continue;
        }
        $array[$key] = SimpleXML2ArrayWithCDATASupport($value);
    }

    return $array;
}
4
Bo Pennings

cette fonction analyse un XML simpleXML récursif pour tableau récursif

function SimpleXML2Array($xml){
    $array = (array)$xml;

    //recursive Parser
    foreach ($array as $key => $value){
        if(strpos(get_class($value),"SimpleXML")!==false){
            $array[$key] = SimpleXML2Array($value);
        }
    }

    return $array;
}
0
user2960279