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 :

utilisation de in_array [PHP 7]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 381
    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 381
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut utilisation de in_array
    Bonsoir,

    je veux savoir si une valeur est présente dans une table MySQL. Je fais donc un fetchAll sur une requête SELECT de cette table puis je teste avec in_array si la valeur est présente dans le tableau retourné par le fetchAll .

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                function isPriority($val):bool
                {
                    $bdd=new MYPDO();
     
                    $sql="SELECT name FROM `Priority`";
                    $prio=$bdd->select($sql,[]);
                    $val=lcfirst($val);
                    if (in_array($val,$prio)) return(TRUE); else return(FALSE);
                }
    J'utilise la classe MyPDO de rawsrc. Donc l'instanciation de celle-ci réalise la connexion (d'ailleurs, un var_dump après le select m'a montré que ça marche).Je fais ensuite un in_array pour tester si $val est bien dans le tableau retourné par le fetchAll (effectué par la méthode select). Et là, surprise, ça me retourne toujours FALSE alors que $val est dans $prio. Pourquoi ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Salut,

    Si $prio est le résultat de fetchAll(), tu dois utiliser array_column :

    avec in_array :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return in_array($val,array_column($prio,"name"));

    Ou bien avec array_search si tu veux récupérer l'index de la valeur recherchée :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return is_numeric(array_search($val, array_column($prio,"name")));

    Puis pourquoi tu rends la première lettre en minuscule ici $val=lcfirst($val); ? (Attention, array_search et in_array sont sensibles à la case..).

    Je me demande aussi pourquoi ne pas faire une simple requête select count(name) from `Priority` where name=? puis tu utilises seulement fetchColumn pour voir si le résultat de la requête existe ou pas?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour vérifier qu'une valeur est dans une table sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT COUNT(*)  FROM `Priority` WHERE name = :val";
    Non ?


    [Oups !] Je viens seulement de voir la dernière partie du message de Toufik83 !
    Vite ! un café !
    Dernière modification par Invité ; 07/02/2020 à 09h12.

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 381
    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 381
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    En effet, utiliser cette requête SQL est de loin le plus simple. Par contre, si rawsrc passe par là, je n'arrive pas à utiliser sa classe MyPDO pour les requêtes préparées...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    $bdd=new MYPDO();
                    $val=lcfirst($val);
                    $sql="SELECT COUNT(*)  FROM `Priority` WHERE name = :val";
                    $prio=$bdd->select($sql,[$val]);
                    var_dump($prio);

    Le var_dump retourne un NULL...

    PS : si je mets le premier caractère de $val en minuscule, c'est que c'est une majuscule dans le fichier CSV et une minuscule dans la bdd...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent,
    (je ne suis pas rawsrc mais...)

    à priori, SQL n'est pas sensible à la casse (?).
    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    $bdd=new MYPDO();
                    $sql="SELECT COUNT(*)  FROM `Priority` WHERE LOWER(name) = :val";
                    $prio=$bdd->select( $sql, [mb_strtolower($val)] );
                    var_dump($prio);
    Cela dit, ouvre une nouvelle discussion pour une question "perso"...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/10/2019, 11h06
  2. [PHP 5.2] utilisation de la fonction in_array dans un tableau multidimensionnel
    Par megaloplex dans le forum Langage
    Réponses: 1
    Dernier message: 23/08/2010, 13h59
  3. Utilisation de la fonction in_array
    Par ikeabp dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2010, 19h28
  4. [Tableaux] Utilisation de "file" et "in_array"
    Par Wanaka dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2009, 20h41
  5. [Système] utilisation de la fonction in_array
    Par WalidNat dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2006, 18h23

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