Aller au contenu

Filtrer une chaine et compter un mot


Lentreprenaute

Sujets conseillés

Bonjour,

j'ai une chaine de caracteres dans laquelle je souhaiterai filtrer les mots pour ne garder que les mots commencant par A ou B etc...

Je ne trouve pas la fonction pour faire ca!

J'aimerai aussi en bonus pouvoir recuperer une variable pour afficher le nombre de fois que le mot est trouvée dans la chaine.

Merci

Florent

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Voici le code pour ta première question :

<?php
$chaine="toto mama Bobo rara riri Ahaha webmaster le hub";
$tableau = explode(" ",$chaine);
$chaineOk="";

foreach ($tableau as $mot ){

$premierLettre = substr($mot,0,1);
if (($premierLettre=="A") or ($premierLettre=="B"))
{
$chaineOk.="$mot ";
}

}
echo trim($chaineOk);
?>

Et pour ta deuxième question, il existe substr_count :

http://www.manuelphp.com/php/function.substr-count.php

Lien vers le commentaire
Partager sur d’autres sites

Merci karak,

si j'abusais un peu, :whistling:

Ton script est parfait pour extraire par A, B..., pour compter la fonction aussi...

J'utilise un array_unique pour filtrer les mots en doublon, j'aimerai donc ressortir les mots dedoublonnés avec le nombre de fois ou ils sont trouvés dans la chaine = BABA (3), BIMBO (5), BLING-BLING (12).

Si tu repasses par là...Je vais bien finir pa y arriver mais je serai interessé d'une alternative ( j'ai tendance a ecrire des romans en php)

Merci

Florent

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Tu peux faire une boucle qui tourne sur ton tableau (exactement comme mon premier code) en faisant un test avec la fonction

substr_count

http://www.php.net/manual/fr/function.substr-count.php

Je t'invite vraiment à prendre l'habitude de faire des recherches dans la doc php.

Php propose des fonctions de traitement de chaine très puissantes et utiles.

Bon courage et n'hésite pas à venir poster ton code ici après pour aider les personnes qui auraient le même objectif que toi :)

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Karak,

En fait j'arrive bien a compter les mots depuis le tableau ( code ci-dessus), la ou je mouline, j'arrive à filtrer les mots en doublons, a connaitre leur nombre donc mais je n'arrive pas fusionner les deux, du moment ou je dedoublonne les mots...

Sinon je regarde la doc php mais j'avoue parfois preferer demander sur ce forum "modérement "des que j'utilise des nouvelles fonctions...

Modifié par Lentreprenaute
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

<?
$AlphaKey="b";// lettre = ABCDEFG etc..

$liste_mots="bimbo bling-bling bling-bling bimbo bling-bling baba intru1 intru2";
$tableau = explode(" ",$liste_mots);
sort($tableau); // classement alphabet...
$chaine;//init

foreach ($tableau as $mot ){
$TriAlpha = substr($mot,0,1);
if ($TriAlpha==$AlphaKey){
$chaine.=$mot." (".substr_count($liste_mots, $mot).")<br>*";

}
}
$chaine = explode("*", $chaine);//* delimite...
$chaine = array_unique ($chaine);// dedoublonne...
$chaine = implode("", $chaine);
echo $chaine;

?>

On doit faire mieux mais ca marche seul les mots commencant par b s'affichent : dédoublonnés avec le chiffre ( nombre de fois ou le mot est present dans la chaine)...

baba (1)
bimbo (2)
bling-bling (3)

Modifié par Lentreprenaute
Lien vers le commentaire
Partager sur d’autres sites

J'ai du mal à comprendre ce que tu veux faire ainsi que ton problème.

Cela t'aidera peut être (si j'ai bien compris).

<?php
$chaine="toto mama Bobo rara riri Ahaha rara webmaster le bobo toto toto";
$tableau = explode(" ",$chaine);
$tableauCount=array();

foreach ($tableau as $mot){

$nbrRepetition = substr_count($chaine,$mot);
$tableauCount[$mot] = $nbrRepetition;
}

$tableauUnique = array_unique($tableau);
foreach ($tableauUnique as $mot ){
print("$mot : $tableauCount[$mot]<br/>");
}
?>

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ton aide, j'ai juste rajouté une condition pour n'afficher que les mots qui commencent par une lettre XXX pour l'exemple la lettre T

$AlphaKey="t";
$chaine="toto mama Bobo rara riri titi Ahaha rara ttt ttt webmaster le bobo toto toto";

$tableau = explode(" ",$chaine);
$tableauCount=array();

foreach ($tableau as $mot){

$nbrRepetition = substr_count($chaine,$mot);
$tableauCount[$mot] = $nbrRepetition;
}

$tableauUnique = array_unique($tableau);
foreach ($tableauUnique as $mot ){
$TriAlpha = substr($mot,0,1);
if ($TriAlpha==$AlphaKey){

print("$mot : $tableauCount[$mot]<br/>");
}
}

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...