Ace Posté 16 Septembre 2004 Posté 16 Septembre 2004 Hello ! Là je suis dans la 4ème dimension ! J'ai un objet SimpleXML de cette forme (obtenu avec un print_r) print_r($simple_xml);resultat :SimpleXMLElement Object( [idLogs] => 1 [actif] => true [groupe] => SimpleXMLElement Object ( [fkGroupe] => Array ( [0] => 3 [1] => 4 ) )) obtenu à partir de ce flux XML : <membre> <idLogs>1</idLogs> <actif>true</actif> <groupe> <fkGroupe>3</fkGroupe> <fkGroupe>4</fkGroupe> </groupe></membre> J'aimerais récupérer le 3 et le 4 qui se trouve dans l'élément fkGroupe. Je fais donc ceci : if (isset($simple_xml->groupe->fkGroupe)) { foreach ($simple_xml->groupe->fkGroupe as $fkGroupe) { $tab_groupes[] = $fkGroupe; } } else { $tab_groupes = array(1); } print_r($tab_groupes); Et voilà ce que j'obtiens : Array ( [0] => SimpleXMLElement Object ( [0] => 3 ) [1] => SimpleXMLElement Object ( [0] => 4 ) ) Si je rajoute un [0] après le $fkGroupe comme ceci : if (isset($simple_xml->groupe->fkGroupe)) { foreach ($simple_xml->groupe->fkGroupe as $fkGroupe) { $tab_groupes[] = $fkGroupe[0]; //juste là. } } else { $tab_groupes = array(1); } print_r($tab_groupes); Le résultat du print_r est le suivant : Array ( [0] => [1] => ) Ou est le juste milieu ???
Dash Posté 16 Septembre 2004 Posté 16 Septembre 2004 (modifié) Bonjour, $fkGroupe n'est pas un tableau mais un objet SimpleXMLElement L'instruction $fkGroupe[0] n'a pas de sens Modifié 16 Septembre 2004 par Dash
Ganf Posté 16 Septembre 2004 Posté 16 Septembre 2004 print_r() est trompeur. Il te donne l'intérieur d'un objet, malheureusement les objets simpleXML utilisent à fond les possibilités PHP5 et ont pas mal de comportements "magiques". Pour récupérer le contenu textuel d'un noeud, il faut simplement essayer d'afficher ce noeud avec echo ou print. Au lieu de faire un print_r($tab_groupes) essayes plutot de faire un foreach($tab_groupes as $grp) echo "grp : $grp <br/>" ; Si tu veux récupérer le texte sans l'afficher, il te faudra passer par strval($grp);
Anonymus Posté 16 Septembre 2004 Posté 16 Septembre 2004 Quel intéret de strval($grp), alors qu'il retourne la même chose que $grp ? (ou je n'ai pas compris la fonction ? )
Ace Posté 16 Septembre 2004 Auteur Posté 16 Septembre 2004 Merci ! En effet, je me mélange un peu les pinceaux entre l'affichage d'un print_r() et d'un simple echo. Je récupérais effectivement ce qu'il fallait. Par contre, j'ai toujours une erreur, mais je n'ai pas encore réussi à l'isoler... Je posterai peut-être une nouvelle question très prochainement
Ganf Posté 17 Septembre 2004 Posté 17 Septembre 2004 _AT_Anonymus : " Quel intéret de strval($grp), alors qu'il retourne la même chose que $grp ?" Il ne retourne pas la même chose. $grp est un objet, strval($grp) est un texte. Quand tu utilises $grp dans une chaîne PHP fait la conversion tout seul, mais si tu souhaites pouvoir envoyer ta donnée à une fonction tierce pas forcément conciliante, il te faudra peut être passer par strval() avant pour être sûr de n'envoyer que le contenu sans l'enrobage SimpleXML. L'exemple type c'est justement celui d'Ace : si il envoie $grp à print_r() ça lui donne des résultats étranges, si il passe d'abord par un strval(), tout rentre dans l'ordre.
Galeenet Posté 11 Octobre 2006 Posté 11 Octobre 2006 Remontage brutal J'utilise SimpleXML, et en particulier strval pour récupérer la valeur d'un element en tant que string. Par exemple : var_dump($item); // Resultat (partiel) : ["group"]=> object(SimpleXMLElement)#12 (1) { ["content"]=> array(3) { [0]=> object(SimpleXMLElement)#13 (0) { } [1]=> object(SimpleXMLElement)#14 (0) { } [2]=> object(SimpleXMLElement)#15 (0) { } } } Je voudrais pouvoir faire un 'simple' : $group = $item->group; Mais ca ne renvoie aucune valeur. J'ai essayé : $group = (array) $item->group; Qui ne fonctionne pas plus. Une idée ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant