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 stripos


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut Utilisation de stripos
    Bonjour

    Je suis en train de coder une page et je reçois une liste d'id et à chaque id est associé une chaîne de caractères. Pour chaque id j'accède donc à ma base de données afin de récupérer cette chaîne de caractères. Le problème c'est que certains id arrivent en double ou triple ou même quadruple et je ne souhaite afficher une chaîne de caractères qu'une seule fois.

    Je concatène donc toutes les chaînes de caractères en une nouvelle chaîne de caractères et avant d'en rajouter une je vérifie qu'elle ne s'y trouve pas déjà avec la fonction stripos.

    Je l'ai déjà fais pour la liste "Habitat" (voir screenshots) et ça fonctionne très bien. Pourtant avec la ligne "Evolutions" (voir screenshots) ça ne fonctionne pas à tout les coups et je ne trouve pas pourquoi.

    Voici le résultat sans stripos pour la ligne "Evolutions" :

    Nom : 1.jpg
Affichages : 142
Taille : 83,4 Ko
    On constate que j'affiche à chaque fois la chaîne courante ainsi que la chaîne qui sera rajoutée.

    Voici le résultat avec stripos pour la ligne "Evolutions" :

    Nom : 2.jpg
Affichages : 232
Taille : 92,6 Ko
    On constate que j'affiche à chaque fois la chaîne courante ainsi que la chaîne qui sera rajoutée et qu'une chaîne est détectée (Boardgon est ajouté une fois ça c'est bon puis la chaîne arrive encore 2 fois mais sa présence est détectée et elle n'est pas rajoutée). Le soucis c'est que la présence de Seki-Shu-Ryu n'est pas détectée ... donc la chaîne a été ajoutée 2 fois.

    Et pour terminer, voici un autre tableau où la présence de "DJ Braki" a été détectée et donc la chaîne n'est pas en double dans la chaîne finale.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    for($yCpt = 0; $yCpt<$nbre_lignes_resultat; $yCpt++)
    {
    	try
    	{
    	$req9 = $pdo_Data2->prepare('SELECT name FROM s_monster WHERE type = :ID;');
    	$req9->bindParam(':ID', $arrAll8[$yCpt][0], PDO::PARAM_STR, 4);
    	$req9->execute();
    	$arrAll9 = $req9->fetchALL();
    	}
    	catch(PDOException $Exception)
    	{
    	echo $Exception;
    	}
        echo "Chaine : ".$noms." - A chercher : ".$arrAll9[0][0]." - ";
    	if(stripos($noms, $arrAll9[0][0]) == false)
    	{
    	if($noms == "")
    	{
    	$noms = $arrAll9[0][0];
    	}
    	else
    	{
    	$noms = $noms.", ".$arrAll9[0][0];
    	}
    	}
    	else
    	echo "Trouvé ------- ";
    }
    Comme vous le constatez, je reçois une liste d'ID et pour chaque ID je cherche la chaîne de caractères associée.

    Avez vous une idée pour résoudre mon problème ?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 996
    Par défaut
    Je ne sais pas trop d'où vient l'erreur mais:
    • indente ton code.
    • quand tu fais un test avec strpos ou stripos il faut toujours tester le type retourné avec un triple = sinon la position 0 sera directement trans-typée en booléen false (en php les conditions 0 == false et '' == false sont vraies): if (stripos($machin, $bidule) === false)

  3. #3
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    Je suis en train de coder une page et je reçois une liste d'id et à chaque id est associé une chaîne de caractères. Pour chaque id j'accède donc à ma base de données afin de récupérer cette chaîne de caractères. Le problème c'est que certains id arrivent en double ou triple ou même quadruple et je ne souhaite afficher une chaîne de caractères qu'une seule fois.
    Déjà ce n'est pas normal, essaie de rajouter un DISTINCT à la suite de ton select dans ta requête ça pourrait t'éviter des ennuis

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Je ne sais pas trop d'où vient l'erreur mais:
    • indente ton code.
    • quand tu fais un test avec strpos ou stripos il faut toujours tester le type retourné avec un triple = sinon la position 0 sera directement trans-typée en booléen false (en php les conditions 0 == false et '' == false sont vraies): if (stripos($machin, $bidule) === false)
    Concernant l'indentation, il est vrai que ça m'aiderait beaucoup mais malheureusement je n'ai rien trouvé qui permet de le faire aussi facilement qu'en C# sous Visual Studio. Pour le PHP j'utilise notepad++. Si vous connaissez quelques plug-in afin de faciliter le PHP sous notepad++ ou avez quelques astuces cela m'aiderait beaucoup car j'ai déjà plus de 15 pages et des centaines de lignes de code et j'avoue qu'il devient difficile de s'en sortir. Le problème c'est qu'appuyer sur la tabulation plusieurs fois à chaque ligne et devoir compter le nombre de tabulations à faire est vraiment très fastidieux.

    Concernant la position de 0 qui sera directement trans-typée, j'ai du mal à comprendre, pouvez vous me donner un exemple svp ? Je pense que ça m'aidera à comprendre. Je comprend que 0 == false est vrai en PHP mais j'ai du mal à comprendre pourquoi 0.

    En tout cas le triple "=" a résolu mon problème. Merci beaucoup, c'était tellement simple.


    Citation Envoyé par -Rpass- Voir le message
    Déjà ce n'est pas normal, essaie de rajouter un DISTINCT à la suite de ton select dans ta requête ça pourrait t'éviter des ennuis
    J'aurais certainement besoin à un moment de connaître le nombre de fois où chaque chaîne de caractère est récupérée dans la base de données et donc je n'ajouterais pas de DISTINCT pour le moment, peut être à la fin si le résultat de la requête après l'ajout de ce mot suffit à tout afficher. Mais ta réponse n'est pas fausse et permettrait de retirer quelques lignes du code et donc de le rendre plus simple à comprendre.

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 996
    Par défaut
    Il existe des éditeurs PHP qui permettent d'indenter le code après coup ou au fil de la saisie (netbeans, les dérivés d'Eclipse: Aptana, Zend Studio) certes. Néanmoins je peux confirmer qu'on ne développe pas de tendinite au pouce ou à l'annulaire en le faisant soi-même.

    strpos ou stripos renvoient la position d'une chaîne recherchée dans une autre chaîne ou false si la chaîne n'est pas trouvée (voir le manuel php). Donc si la chaîne recherchée est au début, ces fonctions renvoient 0 (la position donc).

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Merci pour ces explications

    Je pense rester sur notepad++ surtout que je suis habitué à l'utiliser depuis assez longtemps.

    Bonne soirée

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

Discussions similaires

  1. Utiliser fonction stripos
    Par benthebest dans le forum Langage
    Réponses: 2
    Dernier message: 09/08/2007, 15h38
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 16h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 13h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 17h01
  5. Réponses: 2
    Dernier message: 21/03/2002, 00h01

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