recherche multiple et tableaux variables (prise de tête)

strongwave
Invité n'ayant pas de compte PHPfrance

08 août 2008, 09:22

Bonjour,

J'ai un problème qui me prend la tête depuis 2 jours:

J'ai un tableau simple (array1). Chaque valeur est un mot ((pomme),(banane),(poire),(je),(manger)..). Mais le nombre de valeur est variable.
J'ai un second tableau simple(array2) dont chaque valeur contient une chaine longue (il faut manger des pommes et des poires....)

et je souhaiterais que pour chaque valeur de array2, on vérifie si tous les mots de array1 sont présent.

ça ne me poserait pas de problème si le nombre de valeurs de array1 était fixe mais il est généré suivant une recherche.

Je vous assure que j'ai tout essayé en fonction de mais connaissances.
Merci à vous

Eléphant du PHP | 175 Messages

08 août 2008, 09:28

tu as essaye quoi deja..? :wink:

ViPHP
ViPHP | 5924 Messages

08 août 2008, 09:39

foreach pour parcourir le table, et preg_match() pour chercher dans la chaine.

Invité
Invité n'ayant pas de compte PHPfrance

08 août 2008, 10:09

J'ai essayé ça
nb_mot=count($array1);
foreach ($array2 as $phrase)
{
      for ($i=0;$i<$nb_mot;$i++)
      {
         if (ereg($array1[$i],$phrase))
         {
           echo $cd.'<br/>';
           }
     }
}
mais le probleme c'est que ça vérifie si chaque mot(array1) est présent un par un dans chaque phrase. Or moi je veut savoir si tous les mots sont présent en même temps.
j'espère que c'est un peu plus clair.
Merci à tous[/php][/code]

Eléphant du PHP | 175 Messages

08 août 2008, 10:15

tu pourra difficilement faire mieux... il faut bien verifier chaque mot...
une autre version possible:
foreach ($array2 as $phrase) 
{  
      //on recupere les mots de la phrase
      $mots_phrase=split(" ",$phrase);
      $valide_phrase=true;
      foreach ($array1 as $my_mot){
         if (!in_array($my_mot,$mots_phrase) { 
             $valide_phrase=false;
          } 
     }
     if ($valide_phrase) echo 'bravo!';

}
en mixant les deux et en optimisant on doit arriver a un resultat interressant

Invité
Invité n'ayant pas de compte PHPfrance

08 août 2008, 14:36

merci steph, entre temps j'avais fait ça:
foreach ($array2 as $phrase)
{	
        $u=0;
	for ($i=0;$i<$nb_mot;$i++)
	{
            if (ereg($array1[$i],$phrase))
           {
	        $u=$u+1;
           }
	}
		
	if ($u==$nb_mot)
	{
         echo $phrase.'<br/>';
         }	
}
Sinon j'ai une petite question:
$term='et'
$string='il y a une fleur et un navet dans les forets''
$pattern= $term.'(\s)';
(ereg($term,$string) me retourne forets et non navet ...une idée?