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 :

Problème d'utilisation de $i


Sujet :

Langage PHP

  1. #1
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut Problème d'utilisation de $i
    Bonjour à tous,

    J'ai un code qui permet de faire une requête en fonction du nombre de mots présents dans une variable, séparés par des tirets.
    J'isole donc d'abord chaque mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mot=explode("-",$variable);
    Puis je lance ma requête de cette façon :
    for ($i=0;$i<=1;$i++)
    {
    $sql=mysql_query("select colonne from table where colonne='$mot[$i]'");
    }
    Ça fonctionne très bien quand il y a 2 mots mais pas pour 1 seul : il affiche toujours 2 résultats.
    Je patauge un peu avec $i, quelqu'un pourrait-il m'aiguiller ?
    Merci d'avance.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    utilise foreach pour parcourir ton tableau

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Faits suivant le conseil de stealth35

    Si tu devais utiliser "for" (mais encore une fois "foreach" est plus indiqué), tu pourrais faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $mot = explode("-",$variable);
     
    $nb_mots = count($mot);
     
    for ($i=0; $i<$nb_mots; $i++)
    {
    echo $mot[$i].'<br />';
    }
    Remarque qu'avec cette méthode il n'est possible d'accéder aux éléments du tableaux qu'avec des indices numériques. Il faut par ailleurs que les indices soient parfaitement incrémentés et sans trou dans les index du tableau. Autant de contraintes et d'arguments qui font qu'il est bien plus simple et universel d'utiliser foreach.

  4. #4
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Merci à tous les deux.
    Je vais essayer de réécrire mon code avec foreach.
    Mais je retiens l'astuce de ABCIWEB, surtout que j'avais prévu le comptage du nombre de mots, du coup mettre $nb_mots dans le For est très malin.
    Merci encore de votre aide !

  5. #5
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Pour le "for" ton erreur était sur la condition de fin, comme le montre le code de ABCIWEB

    Mais il y a quand même des contres indications à l'utilisation d'un foreach.

    Par exemple quand ton tableau contient des objets, niveau optimisation en mémoire ce n'est pas le top. ( mais on peut très bien passer par un array_keys + un foreach pour pallier ce problème )

    Après l'avantage du for également c'est pouvoir jouer aussi sur les index.

    Après un explode, il y a peu de chance d'avoir un problème sur les indices d'un tableau.

  6. #6
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Ça fonctionne en effet très bien avec Foreach, c'est plus simple, plus clair.
    Le seul hic, c'est que je n'arrive pas à limiter les requêtes, je ne voulais que 3 requêtes, même si le tableau contient 5 mots-clés.
    Savez-vous comment indiquer une limite ?

    EDIT
    J'ai trouvé la réponse à ma question en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $i = 0;
    foreach ($tableau as $motcle)
    {
    if(++$i > 3) break;
    **ma requete**
    }
    C'est assez propre ?

  7. #7
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Dans ce cas la, le plus simple, à mon avis, est de passer par un for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $mot = explode("-",$variable);
     
    $nb_mots = count($mot);
     
    for ($i=0; $i<$nb_mots && $i < 3; $i++)
    {
    echo $mot[$i].'<br />';
    }
    Sinon avec un foreach, tu peux utiliser break pour provoquer la sortie du foreach.

    A toi de voir.

  8. #8
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Merci Bebel, du coup je vais rester sur Foreach avec un break comme indiqué plus haut.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par Freedolphin Voir le message
    J'ai trouvé la réponse à ma question en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $i = 0;
    foreach ($tableau as $motcle)
    {
    if(++$i > 3) break;
    **ma requete**
    }
    C'est assez propre ?
    C'est une solution, mais si les index de ton tableau sont numériques et incrémentés proprement (sans trous) - ce qui sera le cas avec un explode - tu n'as pas besoin de $i : récupères simplement l'index dans le foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($tableau as $key => $motcle)
    {
    if($key > 3) break;
    **ma requete**
    }

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    on peut toujours limiter le explode et supprimer la dernière entrée

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Oui ou utiliser array_slice sur le explode ce qui donnerait un code plus générique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $mot = explode("-",$variable);
     
    $select = 3;
     
    $tab_mots = array_slice($mot,0,$select);
     
    foreach ($tab_mots as $mot_cle)
    {
    **ma requete**
    }

  12. #12
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Merci à tous pour vos suggestions.
    Ce forum est plus qu'une bouée de sauvetage, c'est un vrai rendez-vous de passionnés pour progresser.

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

Discussions similaires

  1. [RTFEditorKit] Problème d'utilisation
    Par jean.lamy dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/10/2004, 18h30
  2. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  3. [cvs] problèmes d'utilisation
    Par gromite dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/06/2004, 17h41
  4. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  5. problème d'utilisation avec turbo pascal 7.0
    Par le 27 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 03/12/2003, 10h44

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