Comportement de if($array) en PHP

Castor -  
Bilow Messages postés 171 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. DasSium95 Messages postés 741 Statut Membre 135
     
    Bah non parce que ton test regarde s'il y a quelque chose dans ton tableau
    0
  2. Castor
     
    Mon test regarde juste si le tableau vaut true ou false non ? oO
    0
  3. DasSium95 Messages postés 741 Statut Membre 135
     
    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
  4. Castor
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Gremy87 Messages postés 360 Statut Membre 38
     
    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
  7. le père
     
    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
  8. Bilow Messages postés 171 Date d'inscription   Statut Membre Dernière intervention   117
     
    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
  9. Gremy87 Messages postés 360 Statut Membre 38
     
    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
    1. Bilow Messages postés 171 Date d'inscription   Statut Membre Dernière intervention   117
       
      Pour une fois =D
      D'habitude, quand j'ai plusieurs réponses, aucune n'est bonne .. tant mieux pour lui !
      0