Bonjour à tous,
Avant de me pendre, j'aimerais vous exposer un petit soucis... Novice en SPL, n'ayant pas de contacts susceptibles de me renseigner à ce sujet et livré seul face à la quasi non documentation sur les itérateurs, je me retrouve heurté face à un petit problème de compréhension.
Parser un tableau avec des itérateurs récursifs, aucun soucis, on trouve plein d'exemples... Modifier le contenu du dit tableau, c'est déjà plus difficile !
L'idée là c'est de passer un utf8_decode d'emblée en cas d'appel AJAX. Evidemment mes formulaires posts son sur n niveaux, pour faciliter le tout. Je vous cite un morceau choisis:
Cet extrait est adapté, extrait d'un projet basé sur le Zend Framework. Mais la logique est la même à trois fois rien prêt vu que je travaille sur un Array.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $params = $_POST; $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($params)); foreach ($iterator as $name => $value) { $iterator->offsetSet($name, utf8_decode($value)); echo "$name => " . $iterator->offsetGet($name) . "<br/>"; } print_r($iterator->getArrayCopy());
Pour un tableau array('name' => 'Français'); j'ai la sortie suivante:
Cet exemple est totalement édulcoré, et bien sûr mon exemple est beaucoup plus complexe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 name => Français array(1) { ["name"] => string(9) "Français" }
J'ai essayé de multiples variantes (au début j'appelais $iterator->getInnerIterator()->offsetSet(...) avant de comprendre que RecursiveIteratorIterator appelait tout seul comme un grand la méthode sur l'itérateur qu'il encapsulait ), et j'ai toujours ce problème. J'ai même essayé de dumper le tableau au sein de ma boucle, et là c'est encore plus délirant:
J'ai une sortie "correcte" name => "Français", puis, je passe dans un "sous tableau", et à la fin j'ai de nouveau le tableau global en utf8... Je sens très gros un passage de tableau par copie qui perds mes modifications en cours de route... Et j'ai essayé aussi de créer explicitement un ArrayObject avec $_POST, sans succès non plus.
Si des rôdés de la SPL pouvait me sortir de ma détresse, ils auraient ma gratitude éternelle
Partager