Problème avec array_map

Petit nouveau ! | 2 Messages

30 juil. 2009, 19:43

Bonjour à tous,

Alors voilà j'essaye d'appliquer avec la fonction array_map une fonction de nettoyage sur un tableau issu d'une requête XPath et ça ne fonctionne pas, des lignes vides sont renvoyées...
Voici le code :

Code : Tout sélectionner

function cleanxml($var) { if (is_array($var)) { return array_map('cleanxml', $var); } else { return str_replace('[:amp:]', '&', $var); } } $xml = simplexml_load_file(DBFILE); $result = $xml->Xpath('//product'); print_r(array_map('cleanxml', $result));
D'où ça peut venir ? ça fait bien une journée que je m'arrache les cheveux la dessus... c'est rageant !

Merci pour votre aide

Mammouth du PHP | 1511 Messages

30 juil. 2009, 20:28

Ce que retourne la fonction xpath sur une ressource simplexml est un objet, donc tu ne pourras pas le traiter de la sorte vu qu'il n'est pas de type "array".

Mammouth du PHP | 991 Messages

30 juil. 2009, 21:56

Je pense que cette fonction te permettra d'avancé :)
get_object_vars()

Bonne chance Hawk[/url]
DevOps, Symfony4, Hoa

Petit nouveau ! | 2 Messages

31 juil. 2009, 00:55

Cool merci pour vos réponses.

Donc ok je comprend mieux maintenant pourquoi ça ne fonctionne pas...

Alors j'ai essayé get_object_vars() mais ça ne retourne rien...

J'ai aussi tenté le coup avec array_walk et cie puis avec (array) toujours rien...

C'est vraiment bizarre tout de même non ?

Avez-vous une idée de comment il faut procéder ?


Edit ---------------------

Bon j'ai un poil avancé, avec le code ci-dessous ça fonctionne bien mais uniquement si la requête XPath porte sur 1 seul niveau (//product).
Si la requête est de la forme (//product/name) ou si dans le fichier xml <product> n'a pas d'enfant et juste un texte ça foire... :cry:

Code : Tout sélectionner

function cleanxml($var) { if (is_array($var)) { return array_map('cleanxml', $var); } elseif (is_object($var)) { return array_map('cleanxml', get_object_vars($var)); } else { return str_replace('[:amp:]', '&', $var); } } $xml = simplexml_load_file(DBPRODUCTS); $result = $xml->Xpath('//product'); print_r(cleanxml($result));
A votre avis ça vient d'où ? ya pas 36 solutions, le contenu de $var est soit array soit object soit string et devrait donc ressortir non ?

Re edit -------------------------

Hourra ! problême réglé ! :) :) :) Merci !