Aller au contenu

Warning: Variable passed to each() is not an array


Aprilwine

Sujets conseillés

Aie! Je ne peux pas resoudre ce prob...

J'ai une variable PHP qui est certainement un tableau. Je l'ai testée; je l'ai vérifié. Et quand je la passe à la fonction each(), on me renvoit cet erreur "Warning: Variable passed to each() is not an array or object."

Mon code:

print(is_array($deletables)); //Renvoit '1' (vrai).
 while ($item = each($deletables)) { //L'erreur!!!!!
   $children = _AT_mysql_query("SELECT * FROM `ib` WHERE `parent` = '{$item["value"]}'");
   while ($child = _AT_mysql_fetch_array($children)) {
     $deletables = $child["id"];
   }
 }

Je suis absolument certain que la variable est un tableau. J'utilise print_r et j'en vois le contenu. Qu'est-ce que je peux faire????

Lien vers le commentaire
Partager sur d’autres sites

Aprilwine,

On utilise typiquement each() avec list(), comme ceci:

<?php 
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

reset($fruit);
while (list($key, $val) = each($fruit)) {
  echo "$key => $val\n";
}

/* Outputs:
a => apple
b => banana
c => cranberry
*/
?>

Sinon, comme le suggère petit ourson, utilises foreach() ;)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Bah, c'était une faute assez idiote de ma part...

...j'ai oublié les crochets dans une instruction dans la boucle, alors:

print(is_array($deletables)); //Renvoit '1' (vrai).
while ($item = each($deletables)) { //L'erreur!!!!!
  $children = _AT_mysql_query("SELECT * FROM `ib` WHERE `parent` = '{$item["value"]}'");
  while ($child = _AT_mysql_fetch_array($children)) {
    $deletables = $child["id"];
  }
}

bien que $deletables soit de type tableau à la première itération de la boucle, cela ne sera pas le cas à la deuxième, à cause de l'instruction $deletables = $child["id"];, qui aurait dû être $deletables[] = $child["id"]. Voilà!

Et oui, je suis d'accord que l'on utilise habituellement list() avec each(), mais il ne faut pas, et en ce qui me concerne je ne préfère pas introduire trop de variables étrangères à mon code. La fonction each() renvoit un tableau qui contient [0] => clef, ["key"] => clef, [1] => valeur, et ["value"] => valeur, ce qui me sert bien.

Merci tout le même de vos conseils!

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...