[PHP] Nombre d'occurences d'un mot dans une chaine de caractères

Nombre d'occurences d'un mot dans une chaine de caractères [PHP] - PHP - Programmation

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. ;)

Reply

Marsh Posté le 04-11-2002 à 11:43:44   

Reply

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


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

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.

Reply

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 ;)

Reply

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 :
  1. $chaine = "Ceci est un exemple";
  2. $tableau = explode("e", $chaine);
  3. $occurences = count($tableau);
  4. echo "Il y a $occurences fois la lettre e dans cette chaine.";


 
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... :sarcastic:


Message édité par Taiche le 04-11-2002 à 14:28:53

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

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. ;)

Reply

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" :p
 
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 :D


Message édité par Furaxx le 04-11-2002 à 15:21:32
Reply

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.


Message édité par sielfried le 04-11-2002 à 18:56:00

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

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 :D
 
Merci :)

Reply

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) ^^


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed