Lentreprenaute Posté 4 Juin 2008 Posté 4 Juin 2008 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
KaRaK Posté 4 Juin 2008 Posté 4 Juin 2008 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
Lentreprenaute Posté 4 Juin 2008 Auteur Posté 4 Juin 2008 Merci karak, si j'abusais un peu, 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
KaRaK Posté 4 Juin 2008 Posté 4 Juin 2008 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
Lentreprenaute Posté 4 Juin 2008 Auteur Posté 4 Juin 2008 (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é 4 Juin 2008 par Lentreprenaute
Lentreprenaute Posté 4 Juin 2008 Auteur Posté 4 Juin 2008 (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;//initforeach ($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é 4 Juin 2008 par Lentreprenaute
KaRaK Posté 4 Juin 2008 Posté 4 Juin 2008 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/>"); }?>
Lentreprenaute Posté 4 Juin 2008 Auteur Posté 4 Juin 2008 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/>"); } }
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant