IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fonctionnement de la fonction in_array


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut fonctionnement de la fonction in_array
    Bonsoir,

    La fonction in_array ne détecte pas la présence de certaines valeurs dans un tableau. C'est du moins ce que je constate. Je pense qu'il y a un problème sur le type des variables manipulées.

    Si je fais
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            var_dump($event);
    	for ($day = 1; $day <=31; $day++)
    	{echo "day=".$day."/evt=".in_array($day, $event)."<br/>";}
    le var_dump($event) donne
    array (size=4)
    0 =>
    object(stdClass)[5]
    public 'DAY(event_date)' => int 21
    1 =>
    object(stdClass)[6]
    public 'DAY(event_date)' => int 1
    2 =>
    object(stdClass)[7]
    public 'DAY(event_date)' => int 5
    3 =>
    object(stdClass)[8]
    public 'DAY(event_date)' => int 27
    alors que le echo de la ligne 3 donne
    day=1/evt=1
    ...
    day=4/evt=
    day=5/evt=
    day=6/evt=
    day=7/evt=
    ...
    day=21/evt=
    day=22/evt=
    ...
    day=27/evt=
    day=28/evt=
    autrement dit, il détecte bien la valeur 1 mais pas 5,21 et 27. Ca vient peut-être du format de ces données (pas des simples int). Ces données sont produites par un fetch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            $result=array();
    	$i=0;
    	while($val=$qid->fetch()) $result[$i++]=$val;
    que faut-il faire pour que les 4 valeurs soient détectées ?

  2. #2
    Nb
    Nb est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 151
    Points : 426
    Points
    426
    Par défaut
    Effectivement ca viens du fais que tu essayes de comparer des objets avec des entiers.
    Et ca marche pour 1 car in_array doit certainement faire un cast implicite des objets pour avoir des int et que le cast doit echouer en renvoyant true, et 1 == true est vrai.
    Si c'est bien un truc dans ce gout là, si tu fais ton in_array en mode strict tu ne devrais rien trouver du tout.

    Pour remedier à cela tu peux changer ton fetch pour construire un tableau ne contenant que les jours (et pas des objets) par exemple,
    ou alors dans le select tu nomme la colonne "DAY(event_date)" proprement avec un "as" et ensuite tu fais des fetchArray ce qui te permettras d'utiliser un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_search($event, array_column($jourCherche, 'nomColonne'));

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    in_array ne gère pas les objets. Comme alternative aux solutions proposées par Nb, tu peux aussi indexer ton tableau de résultat avec l'information qui t'intéresse (sous condition que ce soit une information unique, l'identifiant par exemple)

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Merci pour vos retours. N'étant pas sûr de savoir les exploiter, j'ai tenté l'option où je modifie le SELECT puis fais des fetchArray, mais je fais pas comme il faut et je ne sais pas comment faire.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	$sql = '
    		SELECT DISTINCT DAY(event_date) AS event
    		FROM calendar_event
    		WHERE event_date BETWEEN :date1 AND :date2';
     
    	$qid = $bdd->prepare($sql);
    	$qid->execute(array(
    		':date1' => $date1,
    		':date2' => $date2,
    	));
    	$result=array();
    	$i=0;
    	while($val=$qid->fetchArray()) $result[$i++]=$val['event'];
    donne
    Fatal error: Call to undefined method PDOStatement::fetchArray() in C:\wamp64\www\vhstest031217\includes\calendar.php on line 37
    comment faire correct ?

  5. #5
    Nb
    Nb est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 151
    Points : 426
    Points
    426

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Tout compte fait, un fetch simple suffit mais le AS dans la requête SQL a tout résolu

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    while($val=$qid->fetch(PDO::FETCH_ASSOC)) $result[$i++]=$val['event'];

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2010, 14h23
  2. [Tableaux] Pb avec fonction in_array
    Par yveslens dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2007, 14h34
  3. [PHP-JS] fonctionnement de la fonction 'header'
    Par enguerran dans le forum Langage
    Réponses: 8
    Dernier message: 02/06/2006, 09h10
  4. [Système] utilisation de la fonction in_array
    Par WalidNat dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2006, 19h23
  5. [Tableaux] fonction in_array inopérante
    Par nicoaix dans le forum Langage
    Réponses: 7
    Dernier message: 21/04/2006, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo