Comportement de if($array) en PHP

Fermé
Castor - 30 mars 2011 à 11:56
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 - 30 mars 2011 à 14:24
Bonjour,

J'aimerais faire un test sur une variable de retour d'une fonction qui renvoi un tableau d'enregistrements si tout s'est bien déroulé et false s'il y a eu une erreur.

Je fais donc un test de la sorte : if($variable_de_retour) { mon traitement }

Cependant, si tout s'est bien déroulé MAIS que le tableau est vide (et donc qu'il n'y a aucun enregistrement), il me passe dans le else, comme s'il y avait eu une erreur.

Mon tableau est défini mais est vide, théoriquement il devrait passer dans le if non ?

Merci pour vos réponses :)


8 réponses

DasSium95 Messages postés 672 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 13 avril 2016 133
30 mars 2011 à 11:57
Bah non parce que ton test regarde s'il y a quelque chose dans ton tableau
0
Mon test regarde juste si le tableau vaut true ou false non ? oO
0
DasSium95 Messages postés 672 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 13 avril 2016 133
30 mars 2011 à 12:01
Un test sur un tableau true ou false ne veut rien dire. Si tu fais un test sur une variable, tu test le contenu de ta variable. SI le tableau a été crée le test sera bon et ira au else parce que ta variable qui contient ton tableau n'est pas vide. Même si ton tableau, lui, est vide
0
Merci pour l'explication mais je n'ai pas tout saisi.

Tu me dis que le test sur la variable sera bon parce que la variable n'est pas vide, malgré que le tableau le soit.

Mais c'est l'inverse qui se produit. C'est à dire que bien que la variable soit définie et mon tableau vide, il se comporte comme si ma variable n'était pas définie.
0

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

Posez votre question
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
30 mars 2011 à 14:05
Bonjour,

si j'ai bien compris soit ça s'est bien passé et ta variable est un tableau (vide ou non) soit ça s'est mal passé et ta variable vaut false, c'est ça?


si l'on raisonne logiquement, tu veux savoir si ta variable est un tableau ou non => if(is_array($variable_de_retour))

Bonne journée
0
Bonjour

Pour tester si une variable est vraiment false en php, penser aux comparaisons === et !== qui comparent non seulement la valeur mais aussi le type :
if($variable_de_retour !== false)  { traitement }
0
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
Modifié par Bilow le 30/03/2011 à 14:26
Salut,

Si tu as un tableau, et que tu souhaites s'il est vide ou non, alors il faut utiliser sizeof() :

if( sizeof($tableau) ){   
echo "Le tableau n'est pas vide !";   
}   
else echo "Tableau vide";

sizeof() renvoi (pour un tableau) le nombres d'entrées présentes. Si c'est 1, 2, 3 et plus, dans un if cela revient à "true", et 0 correspond à "false".

Edit : Ce que tu veux faire, c'est avoir un traitement d'une variable, et :
- Si elle vaut "false", passer au 'else'
- Si elle vaut un tableau vide, passer au 'else'
- Si elle vaut un tableau non vide, alors rester dans le if

if($variable || ( is_array($variable) && sizeof($variable) )){  
echo "Tableau non vide";  
}  
else{  
echo "False ou tableau vide";  
}

Toutefois if($variable) suffit pour le même traitement.
A toi de voir ! ;)
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
30 mars 2011 à 14:13
lol vu le nombre de réponses différentes (et qui me paraissent toutes très correctes) il n'as que l'embarras du choix xD
0
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
30 mars 2011 à 14:24
Pour une fois =D
D'habitude, quand j'ai plusieurs réponses, aucune n'est bonne .. tant mieux pour lui !
0