Compter le nombre de mot dans une chaîne

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je rencontre un soucis au niveau de ce code:
try {$stat = $pdo->query("SELECT Participant FROM tb_user_sondages");
while($data = $stat->fetch(PDO::FETCH_ASSOC)){
$PROFIL_SONDAGES_0A = $data["Participant"];

$PROFIL_SONDAGES_0B = explode($_SESSION_PSEUDO, $PROFIL_SONDAGES_0A);
$PROFIL_SONDAGES_00 = count($PROFIL_SONDAGES_0B);

echo "(".$PROFIL_SONDAGES_00.")<hr>";

}}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}


Il affiche (3) puis (2) sachant que (3) est la valeur juste.
Je n'arrives pas à compter le nombre de mot dans ma chaîne, pouvez-vous m'aider svp ?

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Un exemple de ce que contiennent tes variables serait pas mal pour comprendre ....
    - Que contient ta variable : $PROFIL_SONDAGES_0A ? (Quand ça donne 3 ... et quand ça donne 2)
    - Que contient ta variable : $_SESSION_PSEUDO ? (Quand ça donne 3 ... et quand ça donne 2)

    Sachant que tu es dans une boucle WHILE, il est normal, si ta requête retourne plusieurs lignes... que ça t'affiche différentes valeurs...

    1
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Donc c'est ma boucle while qui me fait défaut ! Si je la supprime je n'aurais pas toutes les lignes de ma table et donc le calcul sera faussé... comment faire dans ce cas ?
      0
  2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Bonjour Jordane45,

    $PROFIL_SONDAGES_0A = "|salut||bonjour||hello||bonjour||bonsoir||bonjour||hello|";
    $_SESSION_PSEUDO = "bonjour";


    Il existe 3 "bonjour" dans ma chaine et le code m'affiche 3 <hr> 2
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Quand à ce code, en essayant de remplacer les pipes par des "," il me donne 2<br>1
      try {$stat = $pdo->query("SELECT Participant FROM tb_user_sondages");
      while($data = $stat->fetch(PDO::FETCH_ASSOC)){
      $PROFIL_SONDAGES_00 = $data["Participant"];
      
      $S = array("||","|");
      $R = array('","','');
      $PROFIL_SONDAGES_00 = str_replace($S, $R, $PROFIL_SONDAGES_00);
      
      echo substr_count($PROFIL_SONDAGES_00, $_SESSION_PSEUDO)."<br>";
      
      }}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu ne réponds pas à ma question....

      Essaye ce code et copie moi tel quel ce que ça t'affiche
      
      try {
        $stat = $pdo->query("SELECT Participant FROM tb_user_sondages");
        while($data = $stat->fetch(PDO::FETCH_ASSOC)){
          $PROFIL_SONDAGES_0A = $data["Participant"];
          $PROFIL_SONDAGES_0B = explode($_SESSION_PSEUDO, $PROFIL_SONDAGES_0A);
          $PROFIL_SONDAGES_00 = count($PROFIL_SONDAGES_0B);
        
          echo "<br>PROFIL_SONDAGES_0A : >".$PROFIL_SONDAGES_0A."<";
          echo "<br>_SESSION_PSEUDO : >".$_SESSION_PSEUDO."<";
          echo "<br>(".$PROFIL_SONDAGES_00.")<hr>";
      
        }
      }catch(PDOException $e){
        echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";
      }
      
      0
    3. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Voilà :
      PROFIL_SONDAGES_0A : >|salut||bonjour||hello||bonjour||bonsoir||hello|<
      _SESSION_PSEUDO : >bonjour<
      (3)
      
      PROFIL_SONDAGES_0A : >|salut||bonjour|hello|<
      _SESSION_PSEUDO : >bonjour<
      (2)
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Avec le code que tu nous as donné et l'exemple de ce que "contiendrait" tes variables... ça ne peut pas être 3 ... mais 4 qui te serait donné !
      Pour preuve:
      $PROFIL_SONDAGES_0A = "|salut||bonjour||hello||bonjour||bonsoir||bonjour||hello|";
      $_SESSION_PSEUDO = "bonjour";
      
      $PROFIL_SONDAGES_0B = explode($_SESSION_PSEUDO, $PROFIL_SONDAGES_0A);
      $PROFIL_SONDAGES_00 = count($PROFIL_SONDAGES_0B);
        
      echo "<br>PROFIL_SONDAGES_0A : ".$PROFIL_SONDAGES_0A;
      echo "<br>_SESSION_PSEUDO : ".$_SESSION_PSEUDO;
      echo "<br>(".$PROFIL_SONDAGES_00.")<hr>";
      


      Le "explode" découpe la chaine en se servant du délimiteur passé en paramètre.
      Il te retourne donc :

      Array
      (
      [0] => |salut||
      [1] => ||hello||
      [2] => ||bonsoir||
      [3] => ||hello|
      )
      0
    5. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
       
      et bien c'est bon.
      Le résultat retourné correspond bien au code donné !
      0