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 :

retrouver un élément dans une chaine de caractères


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut retrouver un élément dans une chaine de caractères
    bonsoir
    je cherche à savoir si un élément au moins , parmi plusieurs , est contenu dans une chaine de caractères .(programation en php)

    exemple
    $chaine = "bateau oiseau vélo voiture camion roue andouille de vire 28.2 A914 ......... "

    et je voudrais savoir si cette chaine contient "vélo" ou "roue" ou "langue de boeuf sauce ravigotte" ou "14"

    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Regarde une des fonctions du genre de substr_count...


    - cette question avait plutôt sa place sur un forum PHP (la preuve, nous y sommes désormais !)
    - comment tester la présence de sous-chaîne dans une chaîne, ça se trouve avec une petite recherche google ou autre (c'est d'ailleurs ce que j'ai fait)

  3. #3
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut
    bonjour

    Je n'ai pas trouvé dans substr_count la réponse à mon problème. Mais peut etre n'ai je pas compris la réponse dans le manuel php.

    merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Cette fonction est pourtant clairement expliquée...
    int substr_count ( string $haystack , string $needle [, int $offset [, int $length ]] )
    substr_count() retourne le nombre d'occurrences de needle dans la chaîne haystack . Notez que needle est sensible à la casse.
    donc si le résultat de substr_count($chaine, "vélo") est strictement supérieur à zéro c'est que $chaine contient "vélo"...

    Test de présence d'une sous-chaîne dans une chaîne : c'est fait.
    Test de présence d'une sous-chaîne parmi plusieurs dans une chaîne : tu n'as plus qu'à boucler...
    (si tu voulais une fonction qui fasse tout d'un coup, je doute que ça existe dans les librairies standards)

  5. #5
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut suite recherche
    bonjour

    je cherchais plutôt une fonction qui fasse tout d'un coup car j'ai environ 80 éléments différents à rechercher dans des chaines et j'aurais préféré quelque chose de plus ergonomique qu'une boucle ou qu'une série de recherche . Mais s'il n'y a pas d'autre possibilité .... j'avais bien compris la fonction de substr mais ne pensais pas qu'elle était ma seule issue ..

    merci

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Hey Mau

    Utilise les tableaux comme dans l'exemple ci-dessous avec la fonction in_array() :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
    //ici on définit des tableaux de tailles 
    $Tab_lp     = array("80a", "85a", "85b", "85c", "90b", "90c"); // etc...
    $Tab_cul    = array("36", "38", "40", "42") ;//etc
    $Tab_chauss = array("36", "36.5", "37", "37.5"); // etc (voir 36.5 ou 365 ????)
     
    //ensuite on interroge la base
    $q_art = "SELECT  * FROM $T_Article";
    $r_art = mysql_query($q_art) or die(mysql_error());
     
    $row_art = mysql_fetch_assoc($q_art);
     
       $LesTailles   = $row_art['taille'];
       $LesQuantites = $row_art['quantite'];
     
       $Tab_Tailles   = explode(";", $LesTailles);
       $Tab_Quantites = explode(";", $LesQuantites);
     
      for($i = 0; $i < count($Tab_Tailles); $i++){
     
           if(in_array($Tab_Tailles[$i], $Tab_lp)){
          // c'est un LP   
       // pour récupérer la quantité
       $q[$i] = $Tab_Quantites[$i];
     
       //le reste du code ici
        }
     
        if(in_array($Tab_Tailles[$i], $Tab_cul)){
          // c'est une culotte  
       // pour récupérer la quantité
       $q[$i] = $Tab_Quantites[$i];
     
       //le reste du code ici
        }
     
        if(in_array($Tab_Tailles[$i], $Tab_chauss)){
          // c'est une chaussure  
       // pour récupérer la quantité
       $q[$i] = $Tab_Quantites[$i];
     
       //le reste du code ici
        }
    }
    ?>
    Note :
    Tu n'as pas besoin de savoir si tu as toutes les tailles : tu n'affiches que celles qui sont présentes.

    Note 2 :
    Tu pouvais également déterminer le type de l'article en lisant le champ "famille_article" et donc en déduire quel type d'affichage de taille tu devras utiliser (cqfd) - c'est plus facile également.

  7. #7
    Membre régulier
    Profil pro
    poireau
    Inscrit en
    Juin 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : poireau

    Informations forums :
    Inscription : Juin 2008
    Messages : 98
    Points : 74
    Points
    74
    Par défaut
    merci je m'y recole ...
    je ne peux pas utiliser famille_article car body et mdb peuvent avoir aussi les tailles de lp ...
    a +

  8. #8
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Exact.

    Ben dans tous les cas cela n'a pas d'importance vu que tu afficheras le meme tableau de tailles... que ce soit lp , body ou mdb .

    Si tu veux pouvoir les différencier absolument, envisage alors de rajouter un champ explicite qui te donnera le type d'affichage des tailles. Il ne servira qu'à ça mais ça va te faciliter le boulot.

    De meme que tu as le champ type_article qui n'est pas gérable vu qu'il est dynamique, tu peux rajouter le champ "type_taille" en ENUM (avec des check boxes dans le back-office pour tes différents affichages de tailles / tu peux avoir plusieurs types de tailles pour le même article)

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Alors là, je suis perdue...
    (d'où ça sort ces )

    Si j'ai bien compris, ce que tu proposes, N1bus, c'est de ranger les mots à chercher dans un tableau (=> {"vélo", "roue", "14"}), de "casser" la chaîne dans laquelle on va les chercher dans un autre tableau ($chaîne devient {"bateau", "oiseau", "vélo", "voiture", "camion", ...}), puis de chercher si l'un des mots du premier tableau se trouve dans le second...
    Ce qui ne répond en fait pas au problème posé : comment vas-tu tester si la chaîne entière "langue de boeuf sauce ravigotte" est présente dans $chaine ?
    (après, ça suffira peut-être à mauyebo, mais dans ce cas c'est qu'il a demandé à faire plus de chose que ce dont il avait besoin )


    j'ai environ 80 éléments différents à rechercher dans des chaines et j'aurais préféré quelque chose de plus ergonomique qu'une boucle ou qu'une série de recherche
    Je ne pense pas qu'algorithmiquement parlant on puisse vraiment faire mieux que de chercher tout à tour si l'un des 80 éléments est présent dans l'une des différentes chaînes à tester. Je peux me tromper... mais je ne pense vraiment pas que ça soit possible facilement.
    Quand tu parles d'ergonomie, tu parles peut-être de la "gueule" de ton code ? Eh bien tu écris les fonctions dont tu as besoin avec les arguments qui te conviennent le mieux, et ensuite tu les appelle à loisir !
    Pour revenir à la demande initiale, c'est-à-dire "savoir si un élément au moins , parmi plusieurs , est contenu dans une chaine de caractères" : en dix lignes tu peux écrire une fonction "atLeastOneSubstr($tableau_elements, $chaine_a_tester)" qui teste si au moins un des éléments contenu dans le premier argument (un tableau de chaînes de caractère) est contenu dans le deuxième argument (une chaîne de caractères).
    Si ça ne te vas toujours pas, tu peux peut-être ré-expliquer ton problème.



    Plus je relis les messages précédents et moins je comprends... D'où ça sort ces "body", "mdb" et "famille_article" ??? Pourtant mauyebo n'a bien que ces 4 messages à son actif, donc ça ne peut pas être la suite d'une discussion commencée ailleurs... Vous vous connaissez et donc vous savez tous les deux quel est le problème de fond, c'est ça ?

  10. #10
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Alors là, je suis perdue...
    (d'où ça sort ces )

    Pas de panique

    mauyebo est un ami et j'ai commencé son site avec lui . Maintenant il est en train de le terminer à la maison.

    La réponse que je lui ai donné est probablement celle qui lui conviendra de mieux. je connais très bien la structure du site.

    Quant au body mdb et lp :
    C'est le site de son magasin de lingerie .

    Effectivement la question n'était pas trop appropriée.
    L'essentiel étant qu'il ait compris.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    j'étais donc arrivée à la bonne conclusion, ça me rassure j'avais vraiment l'impression d'avoir raté un truc
    Bon ben dans ce cas, tu sais certainement mieux que moi ce dont il a besoin, donc je vous laisse.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 0
    Dernier message: 30/03/2011, 15h11
  3. Remplacer un élément dans une chaine de caractères
    Par mauyebo dans le forum Langage
    Réponses: 1
    Dernier message: 05/09/2008, 21h03
  4. [VB.NET] Recherche dans une chaine de caractères
    Par Pleymo dans le forum Windows Forms
    Réponses: 12
    Dernier message: 09/04/2005, 10h25
  5. [C#] Une variable dans une chaine de caractères...
    Par GlorfindelHebril dans le forum Windows Forms
    Réponses: 9
    Dernier message: 31/03/2005, 14h30

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