ereg... Presque bon... besoin d'aide SVP

ereg... Presque bon... besoin d'aide SVP - PHP - Programmation

Marsh Posté le 04-06-2010 à 18:03:16    

soit $rec un tableau de plusieurs mots que je veux comparer à une phrase
 

Code :
  1. for ($i=0;$i<sizeof($rec);$i++)
  2. {
  3. $rc = eregi($rec[$i],$compar2,$tab);
  4. if (($rc==true))
  5.  {
  6.  do tout ce que tu veux
  7.  }......


le problème :
ça me retourne TOUTE phrase contenant n'importe quel mot de mon tableau
 
je voudrais trouver les chaines contenant TOUS les mots de mon tableau...
 
Une idée ?


Message édité par erwan83 le 04-06-2010 à 18:11:34

---------------
http://www.ypikay.com
Reply

Marsh Posté le 04-06-2010 à 18:03:16   

Reply

Marsh Posté le 04-06-2010 à 18:30:32    

l'expression regulière n'est pas adaptée

Code :
  1. $fail = false;
  2. $sentence; // ta phrase a tester
  3. $wordArray; //ton tableau de mots
  4. foreach($wordArray as $word)
  5. {
  6.    if(strpos($word,$sentence) === false)
  7.    {
  8.        $fail=true;
  9.        break;
  10.  
  11.    }
  12.  
  13. }
  14. if(!$fail)
  15. {
  16.   //phrase ok
  17. }
 

mais ça c'est inneficace au possible, autant faire le traitement lors de la  requete en base données


Message édité par flo850 le 04-06-2010 à 18:31:03
Reply

Marsh Posté le 04-06-2010 à 18:39:09    

oui ça me parait trop lourd mais je ne bosse pas avec une bdd j'attaque des fichiers texte...
quoique ça vient de me donner une idée
merci !


Message édité par erwan83 le 04-06-2010 à 18:39:45

---------------
http://www.ypikay.com
Reply

Marsh Posté le 04-06-2010 à 19:00:04    

tu te rens compte qu'a chaque requetes tu fais un nombre impressionnant de strpos ?

 

si tu as n mots recherchés dans m phrases, ça fait n*m comparaison, sachant que le cout de strpos est  grosso modo , fonction de la longueur de la phrase

 

c'est pour ça que les bases de donnée intègrent de indexes, et que les solution de recherches comme lucene stockent directement le lien entre un mot et toutes les donnée sou il appararait


Message édité par flo850 le 04-06-2010 à 19:01:04
Reply

Marsh Posté le 07-06-2010 à 13:28:38    

erwan83, voici un petit outil bien pratique pour aider à mettre au point des regexp : http://gskinner.com/RegExr/
 
C'est pas tout à fait le propos, mais comme c'est un outil bien pratique, ça peut toujours te servir pour autre chose.
 
Pour ton pb, +1 pour passer par une BD.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 07-06-2010 à 14:41:09    

on peux mixer les 2, et jouer avec les tableaux

 
Code :
  1. $str         = "Si une chaîne vide est passée comme paramètre source, une alerte sera générée.
  2. Cette alerte n'est pas générée par libxml, et ne peut être gérée
  3. en utilisant les fonctions de gestion d'erreur de libxml.";
  4.  
  5. $search        = array('vide', 'alerte', 'comme');
  6. $sentences     = explode('.', $str);
  7.  
  8. foreach($sentences as $sentence)
  9. {
  10.    $words     = preg_split('/\b/u', $sentence);
  11.     
  12.    if(array_intersect($search, $words) === $search)
  13.    {
  14.        //echo "found all in : $sentence";
  15.    }
  16. }


Message édité par stealth35 le 07-06-2010 à 15:19:20
Reply

Marsh Posté le 09-06-2010 à 16:35:25    

merci !


---------------
http://www.ypikay.com
Reply

Sujets relatifs:

Leave a Replay

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