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 :

trouver un doublon dans une chaine


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut trouver un doublon dans une chaine
    Bonjour,

    (A) = "Bonjour il y a du soleil"
    (B) = "Je vais me baigner au soleil"
    ou
    (A) = "Dans la cuisine il y a du café"
    (B) = "La cuisine est à gauche"
    Dans ces 2 chaines, je cherche (UN) doublon qui est présent et si oui lequel... via un $tableau[] = $mot;

    pb: le mot n'est pas connu.

    Merci pour vos conseils.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    C'est quoi pour toi un doublon ?
    Tu parles d'une chaine, mais dans ton exemple il y en a 2 (ou 4) ???

    Quel est le résultat attendu de ton ou tes exemples ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Merci pour la réponse,

    Il y a deux chaines, dans chacune d'elle il peut résider (1) mot identique,
    ce que je cherche à faire c'est de savoir qu'elle est ce mot. Il faut donc arriver à découper mot à mot la chaine1 et rechercher mot par mot dans la chaine2 si mot identique trouvé.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 770
    Points : 5 510
    Points
    5 510
    Par défaut
    Si je comprend bien tu veux vérifier qu'il n'y a pas le même mot dans tes deux phrases. A priori je procéderai comme ceci

    1) Extraire chaque mots des phrases et les placer dans un tableau.
    Tu auras donc un tableau contenant ("Bonjour","il","y","a","du","soleil") et un autre contenant ("Je","vais","me","baigner","au","soleil")
    2) avec une boucle tu prends chaque mot du premier tableau
    3) tu place une deuxième boucle à l'intérieur de la première pour parcourir le deuxième tableau et tu teste si le mot dans le tableau 1 est égal au mot dans le tableau 2.

    Code PHP : 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
     
    $phrase1="Bonjour il y a du soleil";
    $phrase2="Je vais me baigner au soleil";
    $tableau1=explode(" ",$phrase1);
    $tableau2=explode(" ",$phrase2);
    $mot="";
    $arret=False;
    $i=0;
    while ($i<=length($tableau1)-1) and ($arret==False) {
      $j=0;
      while ($j<=length($tableau2)-1) and ($arret==False){
        if ($tableau1[$i]==$tableau2[$j]) {
          $arret=True;
          $mot=$tableau1[$i];
        }
        else{
          $j++;
        }
      }
      $i++;
    }

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tout dépend de ce que tu appelles "mot"...
    Tu peux toujours faire un explode sur l'espace des deux chaines, puis faire une intersection des deux tableaux obtenus.

    Seulement ça pré-suppose que tout groupe de lettres qui ne sont pas un espace est un mot. Ce qui est loin d'être le cas partout, à commencer par la langue française.

    Pour extraire tes mots il te faudra alors utiliser un système plus intelligent, peut être à l'aide de regexp /(\w*)/u ... Attention alors à l'encodage (utf-8, latin1 ?) des caractères.

    Il faudra aussi faire attention aux typos (levenstein sera alors peut-être utile), aux différences de casse (majuscule/minuscule), aux mots à plusieurs orthographes (clé == clef), au genre et nombre... bien entendu en fonction du contexte

    Le domaine est très vaste, bon courage

  6. #6
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    1) Je decoupe ma première phrase et je la stock dans un tableau.
    2) Je decoupe ma seconde phrase et je la stock dans un tableau.
    3) Je teste si les mots de la phrase une sont dans la seconde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $un = explode(" ",$phrase1);
    $deux = explode(" ",$phrase2);
    foreach($un as $key => $value){
      if(in_array($un[$key],$deux){
        //le mot de $un est dans les mots de deux
      }
    }
    tu peux aussi le faire avec une boucle for.

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $s1 = "Dans la cuisine il y a du caf";
    $s2 = "La cuisine est  gauche";
     
    $communs = array_intersect(explode(' ', $s1), explode(' ', $s2));
     
    print_r($communs);
     
    ?>

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Merci

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

Discussions similaires

  1. trouver les mots dans une chaine
    Par thierry007 dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/04/2010, 09h30
  2. [Toutes versions] Supprimer les doublons dans une chaine de caractères
    Par Mootchoop dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/08/2009, 18h10
  3. Trouver un nombre dans une chaine de caractère ?
    Par Coussati dans le forum Débuter
    Réponses: 4
    Dernier message: 27/10/2007, 00h35
  4. [RegEx] trouver un mot dans une chaine de caractère
    Par starr dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2007, 15h36
  5. Réponses: 5
    Dernier message: 21/11/2005, 14h24

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