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 :

calculer le nombre d'occurence de mot dans une chaine


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de hadjiphp
    Inscrit en
    Décembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 155
    Par défaut calculer le nombre d'occurence de mot dans une chaine
    Bonjour,
    j'ai une question :
    j'ai une chaine de caractére composé de plusieurs mots par des virgules.
    je cherche comment calculer le nombre d'occurence de cette mot dans la chaine en php.
    merci de me répondre je cherche une réponse le plutot possible si c'est possible.
    merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    faut être précis quand on pose une question...

    Tu veux le nombre d'occurrences d'un mot donnés ? Ou le nombre d'occurence de chaque mot qu'il est possible de trouver dans la chaine ?

  3. #3
    Membre confirmé Avatar de hadjiphp
    Inscrit en
    Décembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 155
    Par défaut
    Bonjour,
    je cherche a calculer le nombre d'occurence de chaque mot qu'il est possible de trouver dans la chaine.
    merci d'avance.

  4. #4
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    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
    <?php
     
    //$machaine = la chaine contenant tes mots
     
    $tab = explode(',', $machaine)
    $tmp = array();
    foreach($tab as $val)
    {
       if(!isset( $tmp[trim($val)])) = 0;
       $tmp[trim($val)]++;
    }
     
    echo '<pre>';
    print_r($tmp);
    echo '</pre>';
     
    ?>

  5. #5
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    c'est une version case-sensitive ! pour du case insensitive, fais :

    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
    <?php
     
    //$machaine = la chaine contenant tes mots
     
    $tab = explode(',', $machaine)
    $tmp = array();
    foreach($tab as $val)
    {
       $val = strtolower(trim($val));
       if(!isset($tmp[$val])) = 0;
       $tmp[$val]++;
    }
     
    echo '<pre>';
    print_r($tmp);
    echo '</pre>';
     
    ?>

  6. #6
    Membre confirmé Avatar de hadjiphp
    Inscrit en
    Décembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 155
    Par défaut
    Bonjour,
    merci pour votre reponce, ça marche trés bien
    mais il ya une erreur qui j'arrive pas a le résoudre
    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
    <?php
     
    //$machaine = la chaine contenant tes mots
     
    $tab = explode(',', $machaine)
    $tmp = array();
    foreach($tab as $val)
    {
       $val = strtolower(trim($val));
       if(!isset($tmp[$val])) = 0;
       $tmp[$val]++;
    }
     
    echo '<pre>';
    print_r($tmp);
    echo '</pre>';
     
    ?>
    en gras affiche une erreur:
    affiche l'erreur suivantes : Notice: Undefined index: in e:\easyphp1-8\www\code source\occurence.php on line 23


    merci en avance de me répondre

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Plus rapide que la boucle, et plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
      $chaine = 'bonjour,tout,Le,Monde,le,monde,va,bien';
      $nb = array_count_values(explode(',', strtolower($chaine)));
     
      echo '<pre>';
      print_r($nb);
      echo '</pre>';
    ?>

  8. #8
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    cette dernière proposition ne devrait cependant tenir compte des espaces si je ne m'abuse... Faudrait peut être les suppriler dans la chaine originale.

    hadjiphp, un notice n'est pas une erreur !

    En revanchen c'est vrai que mes doigts en fourcher en écrivant, il fallait lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!isset($tmp[$val])) $tmp['val'] = 0;
    cette ligne n'est d'ailleurs pas indispensable et est là pour la rigueur.

    Et pour desactiver les notices, php.ini ERROR_REPORTING E_ALL ~E_NOTICE

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Citation Envoyé par comode Voir le message
    cette dernière proposition ne devrait cependant tenir compte des espaces si je ne m'abuse... Faudrait peut être les suppriler dans la chaine originale.
    C'est vrai, et dans ce cas, il suffit d'ajouter un "str_replace" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
      $chaine = 'bonjour,tout, Le,Monde,le,monde,va,bien';
      $nb = array_count_values(explode(',', strtolower(str_replace(' ', '', $chaine))));
     
      echo '<pre>';
      print_r($nb);
      echo '</pre>';
    ?>
    Le même code décomposé, pour plus de clarté :
    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
    <?php
      $chaine = 'bonjour,tout, Le,Monde,le,monde,va,bien';
      //--- suppression des espaces ------------------------------------------------
      $chaine = str_replace(' ', '', $chaine);
      //-- passage de la chaîne en minuscules --------------------------------------
      $chaine = strtolower($chaine);
      //-- récupération dans un tableau de chaque élément de la chaîne -------------
      $element = explode(',', $chaine);
      //-- comptage des éléments communs dans le tableau ---------------------------
      $nb = array_count_values($element);
     
      echo '<pre>';
      print_r($nb);
      echo '</pre>';
    ?>

Discussions similaires

  1. compter le nombre d'occurences d'un mot dans une chaine
    Par huître dans le forum VBA Access
    Réponses: 8
    Dernier message: 15/10/2014, 15h19
  2. Réponses: 6
    Dernier message: 12/12/2010, 23h09
  3. [RegEx] Occurence de mot dans une chaine
    Par hades89 dans le forum Langage
    Réponses: 16
    Dernier message: 06/10/2009, 17h43

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