Bonjour !
Je voudrais savoir quelle est la fonction à utiliser pour compter le nombre d'occurences d'un caractère dans une chaine (dans mon cas, l'éspace) pour pouvoir compter le nombre de mots dans un texte.
Merci d'avance !
foreach (count_chars($texte, 1) as $i => $val) {
print "Il y avait $val occurrence(s) de \"" . chr($i) . "\" dans la phrase.\n</br>";
}
mais je n'arrive pas à le "spécialiser pour un seul caractère...foreach (count_chars($texte, 1) as $i => $val) {
if (chr($i) == "(a, à)" or chr($i) == "à"){
print "Il y avait $val occurrence(s) de \"" . chr($i) . "\" dans la phrase.\n</br>";}
Le soucis, c'est que je n'arrive pas à regrouper le "a" et le "à"
Ne fais pas une boucle si seulement quelques valeurs du tableau t'intéressent.EDIT J'ai trouvé !
Je procède de la manière suivante :Le soucis, c'est que je n'arrive pas à regrouper le "a" et le "à"foreach (count_chars($texte, 1) as $i => $val) { if (chr($i) == "(a, à)" or chr($i) == "à"){ print "Il y avait $val occurrence(s) de "" . chr($i) . "" dans la phrase.\n</br>";}
$occurrences = count_chars($texte, 0);
$nb_A = $occurrences[ord('a')]
+ $occurrences[ord('à')]
+ $occurrences[ord('A')]
+ $occurrences[ord('À')];
On peut facilement généraliser à une fonction function count_charslist($string, $chars) {
$len = strlen($chars);
$occ = count_chars($string, 0);
$result = 0;
for ($i=0; $i<$len; ++$i) {
$result += $occ[ord($chars{$i})];
}
return $result;
}
$nb_A = count_charslist($texte, "aàAÀ");$texte = eregi_replace ("[àäâ]", "a", $texte);
$texte = eregi_replace ("ç", "c", $texte);
$texte = eregi_replace ("[éèêë]", "e", $texte);
$texte = eregi_replace ("[ïî]", "i", $texte);
$texte = eregi_replace ("[öô]", "o", $texte);
$texte = eregi_replace ("[üûù]", "u", $texte);
$texte = strtolower($texte);
Note : Il y a peut-être une syntaxe plus compacte qui permet de tout faire en une seule instruction, mais je trouve que les expressions régulières ont vite tendance à devenir illisibles et donc inmodifiables (avis strictement personnel).$dummmy = str_ireplace (array("a", "à", "ä", "â"), "", $texte, $count);
Tu dois pouvoir récupérer le nombre de remplacements dans $count, donc le nombre de a, à, ä, ... mais je ne l'ai pas testé.
Attention, pour ce type de remplacements il faut utiliser la fonction strtr qui est bien plus performante que des expressions régulières dans des cas de remplacements de caractères :$texte = eregi_replace ("[àäâ]", "a", $texte); $texte = eregi_replace ("ç", "c", $texte); $texte = eregi_replace ("[éèêë]", "e", $texte); $texte = eregi_replace ("[ïî]", "i", $texte); $texte = eregi_replace ("[öô]", "o", $texte); $texte = eregi_replace ("[üûù]", "u", $texte); $texte = strtolower($texte);
$texte = strtr($texte, "çàâäéèêëîïôöùûü", "caaaeeeiioouuu");Tout à fait. Sauf si on veut aussi transformer les caractères accentués majuscules qu'il faut alors se taper à la main dans la chaîne "çàä...ÄÂ..." car strtr n'a pas de version case insensitive. Mais rien de bien méchant ...Attention, pour ce type de remplacements il faut utiliser la fonction strtr qui est bien plus performante que des expressions régulières dans des cas de remplacements de caractères :$texte = strtr($texte, "çàâäéèêëîïôöùûü", "caaaeeeiioouuu");