Nombre d'occurences d'un mot dans une chaine de caractères [PHP] - PHP - Programmation
Marsh Posté le 04-11-2002 à 11:48:19
'tain, y a eu plein de posts traitant de ce sujet. Y en a même un sur cette page : http://forum.hardware.fr/forum2.ph [...] subcat=393
Marsh Posté le 04-11-2002 à 14:10:43
Le post que tu donnes sert à compter simplement le nombre du mot d'une chaine de caractères.
Moi ce que je veux, c'est savoir par exemple combien de fois il y a le mot "truc" dans une chaine.
Marsh Posté le 04-11-2002 à 14:26:43
salut,
s'il s'agit de cherche les itérations d'une liste de mots dans une chaine de carac, et non un seul mot, alors le prob est assez délicat et il doit exister de nombreuses méthodes d'attaques plus ou moins efficaces en fonction du langage utilisé.
une approche que je serais tenté de te proposer c'est de décomposer ta chaine en une liste de mots. charge a toi de trouver les séparateurs qui déterminent s'il s'agit d'un nouveau mot). De trier cela avec un algo Qsort. Puis de comparer la liste de mots trier a rechercher avec la liste de mots générée et trier.
La complexité de l'algo ne devrait pas être sup a n*ln(n) a priori evidement
Marsh Posté le 04-11-2002 à 14:26:50
...
explode() retourne un tableau. Et pour savoir combien y a d'éléments, ba t'as la fonction count().
Exemple :
Code :
|
Ch'ais pas, c'est quand même pas compliqué de remplacer " " par "truc" dans explode().
Edit : barbarella : nan, il cherche juste à savoir combien de fois il y a la chaine "images/smileys" dans une chaine. Pas de quoi se prendre la tête avec des Qsort et des logarithmes népériens...
Marsh Posté le 04-11-2002 à 14:31:09
Ben ta fonction qui remplace les caractères par les smilies, si elle utilise les regexp, utilise donc "preg_replace($regexp,$remplace,$texte[,$limit])" à la place de str_replace.
Chaque
Si $limit est un integer, la valeur de $limit indique le nombre max de remplacement pour chaque $regexp.
Si $limit est un tableau d'integer, alors chaque valeur de $limit indiquera le nombre max de remplacement de la valeur du tableau $regexp corespondant.
Sinon, utilise des boucles en sortant de la boucle au bout de n smilies trouvé.
Comme ça, le message posté n'est pas perdus.
Marsh Posté le 04-11-2002 à 15:20:20
Taiche> OK, merci, j'avais carrément pas pensé à ça... prochaine fois je chercherai d'abord une solution "con"
barbarella> j'vais prendre la solution de Taiche, ta solution est bien aussi, mais en fait, si le mec poste un message avec plus de 20 smileys ben... faut le faire quoi, et donc, je veux qu'il soit perdu justement pour décourager les emm...erdeurs
Marsh Posté le 04-11-2002 à 18:55:46
Le truc de Taiche n'est pas tout à fait exact il me semble : le nombre d'occurences de "e", en reprenant son exemple, serait $occurences - 1 et non $occurences. Puisque dans une chaîne comme "Ceci est un exemple", explode sépare en "C", "ci ", "st un ", "x", "mpl" et "", ce qui fait 7 cases de tableau.
Marsh Posté le 04-11-2002 à 19:01:36
Oui, j'ai pensé à ce truc là, mais ça dépend si le commentaire commence par un smiley et finit avec un...
Bon, de toute façon, je ne suis pas à 1 ou 2 près, du moment que j'évite les 200
Merci
Marsh Posté le 04-11-2002 à 19:08:28
Furaxx a écrit a écrit : Oui, j'ai pensé à ce truc là, mais ça dépend si le commentaire commence par un smiley et finit avec un... |
Ben quelle que soit la chaîne, ce sera $occurences - 1 il me semble, que ça se finisse ou non par le smiley (ou le "e" dans l'exemple) ^^
Marsh Posté le 04-11-2002 à 11:43:44
J'ai un site avec une page de news, et la possibilité de poster des commentaires avec des smileys. Mais comme toujours, des petits malins s'amusent à poster un message avec par exemple 200 smileys identiques dans leur message.
Mes smileys sot enregistrés dans un répertoire "images/smileys"
Je voudrais donc, pour éviter ça, compter le nombre de "images/smileys" dans le message poster, et s'il dépasse par exemple 20, ne pas enregistrer le commentaire.
Si d'autres façon plus simples existent, je suis aussi preneur.