Compter le nombre de mot dans une chaîne

Résolu/Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 25 juil. 2018 à 15:51
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 25 juil. 2018 à 18:17
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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 juil. 2018 à 17:05
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
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
25 juil. 2018 à 17:15
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
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
25 juil. 2018 à 17:09
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
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
25 juil. 2018 à 17:13
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 juil. 2018 à 17:25
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
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
25 juil. 2018 à 17:29
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 juil. 2018 à 17:30
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
25 juil. 2018 à 17:30
et bien c'est bon.
Le résultat retourné correspond bien au code donné !
0