Compter des mots pscefiques dans une phrase en php

Eléphanteau du PHP | 14 Messages

27 juil. 2009, 23:17

Bonjour a tous,

J'ai trouve la fonction suivante qui permet de compter le nombre de mots specifiques dans une chaine en php :

code:

Code : Tout sélectionner

<? function str_incounter($match,$string) { $count_match = 0; for($i=0;$i<strlen($string);$i++) { if(strtolower(substr($string,$i,strlen($match)))==strtolower($match)) { $count_match++; } } return $count_match; } //on declare les variables pour l'exemple $mot="essais"; $string="voici un essais comptage essais numero un"; //si j'applique la fonction echo $count_some = str_incounter($mot,$string); ?>
J'obtiens bien le nombre 2, car le mot "essais" apparait bien deux fois.

Mais je n'ai pas reussi a trouver une fonction similaire qui puisse traiter plusieurs mots.

Par exemple dans l'exemple precedent, si j'applique la variable
$mot="essais numero";

ca ne marche pas car cette fonction ne fonctionne que sur un seul mot. Hors je voudrais pouvoir trouver un moyen pour que le code ou un autre m'indique 3.
Et je n'ai pas reussi a trouver la moindre fonction ou script qui puisse faire cela malgre mes recherche.

je precise que je ne suis pas un pro.

Merci pour vos aides.

David

Ps : Desole pour les accents, j'ecris avec un QWERTY.

Mammouth du PHP | 991 Messages

27 juil. 2009, 23:23

ca ne marche pas car cette fonction ne fonctionne que sur un seul mot. Hors je voudrais pouvoir trouver un moyen pour que le code ou un autre m'indique 3.
Et je n'ai pas reussi a trouver la moindre fonction ou script qui puisse faire cela malgre mes recherche.
Salut a toi , j'ai pas compris ton souci , car n'importe quelle fonction ne te retournera jamais , alors que dans la phrase il n'y a qu'une occurrence !

Bonne nuit Hawk
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 14 Messages

27 juil. 2009, 23:37

Salut,

je vais essayer d'etre un peu plus clair.

J'ai la chaine de caractere suivante :

"voici un essais comptage essais numero un";

Je souhaiterais connaitre le nombres additionnes des mots suivant (c'est une exemple )
"essais " et "un".

J'ai cherche et trouve des fonction de comptage de mots specifiques, mais ceux ci ne fonctionnent que si il n'y a qu'un mot. Hors dans l'exemple donne, je souhaiterai trouver une methode qui puisse me comptabiliser l'ensemble des mots voulus. Dans le cas precedent, le total serai de 3 car "essais" apparait 2 fois et "un" 1 fois, soit au total 3...

Mais je ne trouve pas.

Merci

David

Eléphant du PHP | 65 Messages

27 juil. 2009, 23:43

Peut-être cherches-tu ceci ?
<?php 
function str_incounter() {
$count_match = 0;
$words = func_get_args();
$string = array_pop($words);
foreach ($words as $word) {
	for($i=0;$i<strlen($string);$i++) {
	if(strtolower(substr($string,$i,strlen($word)))==strtolower($word)) {
	$count_match++;
	}
	}
}
return $count_match;
}


//on declare les variables pour l'exemple

$string="voici un essais comptage essais numero un";

//si j'applique la fonction

echo $count_some = str_incounter("essais","un","numero",$string);
?>

Fred

Eléphanteau du PHP | 14 Messages

27 juil. 2009, 23:58

Salut a Nouveau,

Le script marche mais la il s'agissait d'un exemple.

je fait comment si je ne connais pas les mots a l'avance? (par exemple dans le cadre d'un formulaire en passant par une variable...)

en effet

si je remplace

Code : Tout sélectionner

echo $count_some = str_incounter("essais","un","numero",$string);
par :

Code : Tout sélectionner

$mot="essais un numero"; echo $count_some = str_incounter($mot,$string);
ca ne marche pas.

J'espere que kje suis clair :oops:

Merci

David

Eléphant du PHP | 65 Messages

28 juil. 2009, 00:15

Alors cela te conviendra peut-être mieux :
<?php 
function str_incounter($match,$string) {
$count_match = 0;
$match = preg_replace('/[ ]{2,}/',' ',trim($match));
$words = explode(' ',$match);
foreach ($words as $word) {
	for($i=0;$i<strlen($string);$i++) {
	if(strtolower(substr($string,$i,strlen($word)))==strtolower($word)) {
	$count_match++;
	}
	}
}
return $count_match;
}


//on declare les variables pour l'exemple
$match = "   essais   un                numero        ";
$string="voici un essais comptage essais numero un";

//si j'applique la fonction

echo $count_some = str_incounter($match,$string);
?>
Fred

Eléphanteau du PHP | 14 Messages

28 juil. 2009, 00:24

Salut,

Merci beaucoup pour ton aide, c'est bien ce que je recherchais depuis des lustres.
Ca marche ....

Bravos :wink:

Merci encore

David