Besoin d'aide pour comprendre Array_walk [Résolu]

Signaler
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011
-
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011
-
Bonjour,

j'ai vu dans google code la ligne suivante :
array_walk($set, create_function('&$a', 'if(isset($a)): $a "\'".AddSlashes($a)."\'"; else: $a "NULL"; endif;'));


Sachant que $set correspond à :
$set = array();
    $set["date"] = "01/01/05";
    $set["texte"] = "blabla";


J'ai regardé le manuel php pour comprendre les deux principales fonctions :
array_walk et create_function mais j'ai vraiment du mal. Quelqu'un pour m'aider à la comprendre littéralement et à comprendre du coup la fonction complète.
Le contexte est que je prépare une classe PDO pour mes requêtes donc j'ai vraiment besoin de comprendre cette fonction car elle va me servir pour ma requête de modification et d'insertion.

Merci d'avance.

6 réponses

Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
Le $a est un paramètre de la fonction qui a été crée.

create_function('&$a', 'if(isset($a)): $a "\'".AddSlashes($a)."\'"; else: $a "NULL"; endif;')

Si tu as besoin de quelque chose d'un peu plus clair comme syntaxe tu peux faire légèrement différent.

function escapeChar(&$item, &$index) {
    if(isset($item)) {
        $item = '\'' . addslashes($item) . '\'';
    } else {
        $item = 'NULL';
    }
}

array_walk($set, 'escapeChar');


Pour la logique de la fonction, c'est à peu près ce que tu as compris.
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
Le arraywalk te permet d'exécuter une fonction sur chaque élément d'un tableau.

Pour le create_function, c'est carrément une fonction pour créer une fonction «on the fly». Le premier paramètre c'est les paramètres de ta fonction et après c'est ce qui se trouve dans ta fonction.
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Bonjour,

mais pour ca : if(isset($a)): $a "\'".AddSlashes($a)."\'"; else: $a "NULL"; endif;

ne pourrait-on pas le remplacer par autre chose de plus clair. Car si je comprend bien, ca indique que si a existe on met des slash sinon on concidère que a est vide. Est-ce bien ça ?
Commetn est généré a alors ? il est vide la première fois et après...
Merci déjà pour cette réponse.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Non, $a n'est pas vide la première fois, il vaut "01/01/05" puis "blabla"
En fait la fonction anonyme ne fait qu'entourer les valeurs de $set par des ' et échappe ces mêmes ' qui pourraient se trouver dans la chaîne.
Si la variable n'est pas définie elle la remplace par la string NULL.

En fait tu devrais pouvoir également l'écrire comme ça :
<?php
function truc (&$valeur_de_set) {
  if (isset($a)) {
    $valeur_de_set = "\'".addslashes($valeur_de_set)."\'";
  } else {
    $valeur_de_set = "NULL";
  }
}

array_walk($set, 'truc');
?>


En espèrant avoir apporté un peu de précision.

Cordialement,



Kohntark -
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Oups, je n'avais pas vu la réponse d'Arto, et en plus il y a des erreurs dans mon code
j'ai écrit ça à la va vite.

<?php
function truc (&$valeur_de_set) {
  if (isset($valeur_de_set)) {
    $valeur_de_set = '\''.addslashes($valeur_de_set).'\'';
  } else {
    $valeur_de_set = "NULL";
  }
}

array_walk($set, 'truc');
?>

... en somme c'est pile poil la même chose qu'Arto ... ça ne doit pas être pleinement mauvais.


Cordialement,


Kohntark -
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Merci bcp en effet cela m'en apporte.