Besoin d'aide pour comprendre Array_walk

Résolu
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011 - 25 oct. 2009 à 14:09
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011 - 28 oct. 2009 à 08:52
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

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
26 oct. 2009 à 13:26
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.
3
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
26 oct. 2009 à 03:46
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.
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
26 oct. 2009 à 11:09
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.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 oct. 2009 à 14:10
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 -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 oct. 2009 à 20:01
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 -
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
28 oct. 2009 à 08:52
Merci bcp en effet cela m'en apporte.
0
Rejoignez-nous