2012-12-12 2 views
1

Je me demande si quelqu'un peut aider avec un petit problème, je ne peux pas sembler fixer - ma tête tourne en rond au moment ...recherche multiples mots correspondant à l'aide strpos

Ok j'ai un. Fichier txt avec de nombreuses lignes d'informations - J'essaie de faire correspondre les mots-clés avec ces lignes et afficher un certain nombre de lignes correspondantes.

J'ai assemblé ce bit de script et pendant qu'il fonctionne il ne correspond à une ligne que si les mots sont dans le même ordre que les mots de recherche.

Au moment comme un exemple:

Rechercher mots:

chapeau rouge

lignes dans le fichier txt:

c'est mon chapeau rouge
mon chapeau est rouge
ce chapeau est vert
c'est un foulard rouge
votre chapeau rouge est belle

Comme le script est à l'heure actuelle, il correspondra et lignes d'affichage 1, 5

Cependant, je voudrais qu'il corresponde et lignes d'affichage 1, 2, 5

Toute commande mais tous les mots doivent être présents pour correspondre.

J'ai regardé à travers des tas de messages ici et d'ailleurs, et je comprends que ce qui est nécessaire est de faire exploser la chaîne, puis rechercher chaque mot dans une boucle, mais je ne peux pas obtenir que le travail, en dépit d'essayer quelques différents façons comme il renvoie juste la même ligne de nombreuses fois .

Toute aide serait appréciée avant que je perde ce que les cheveux me reste :-)

Voici le code que j'ai travaille actuellement - la variable de recherche est déjà ensemble:

<?php 
rawurldecode($search); 
$search = preg_replace('/[^a-z0-9\s]|\n|\r/',' ',$search); 
$search = strtolower($search); 
$search = trim($search); 

$lines = file('mytextfile.txt') or die("Can't open file"); 
shuffle($lines); 

$counter = 0; 

// Store true when the text is found 
$found = false; 

foreach($lines as $line) 
{ 

    if(strpos($line, $search) !== false AND $counter <= 4) 
    { 
    $found = true; 
    $line = '<img src=""> <a href="">'.$line.'</a><br>'; 


    echo $line; 
    $counter = $counter + 1; 

    } 

} 

// If the text was not found, show a message 
if(!$found) 
{ 
    echo $noresultsmessage; 
} 

?> 

Merci à l'avance pour toute aide - encore à apprendre :-)

Répondre

1

Voici mon code:

$searchTerms = explode(' ', $search); 
$searchCount = count($searchTerms); 
foreach($lines as $line) 
{ 
    if ($counter <= 4) { 
     $matchCount = 0; 
     foreach ($searchTerms as $searchWord) { 
      if (strpos($line, $searchWord) !== false) { 
       $matchCount +=1; 
      } else { 
       //break out of foreach as no need to check the rest of the words if one wasn't found 
       continue; 
      } 
     } 
     if ($matchCount == $searchCount) { 
      $found = true; 
      $line = '<img src=""> <a href="">'.$line.'</a><br>'; 
      echo $line; 
      $counter = $counter + 1; 
     } 

    } 
} 
+0

Wow! Merci beaucoup pour la réponse rapide - vraiment utile m'avait cogné la tête pendant quelques heures - l'une des choses que j'ai découvert était que le remplaçant qui était à moi ne fonctionnait pas correctement ce qui a causé des problèmes :-(Si je peux demander une question de plus - s'il n'y a pas de résultats trouvés où devrais-je mettre un message à la sortie à l'écran? Je pensais à partir du commentaire qu'il serait autour de la déclaration continue, mais cela ne semble pas être le cas ??? ! – onelove

+0

@onelove même endroit que vous l'aviez, cela remplace simplement le 'foreach' que vous aviez dans votre code – ernie

+0

@ ernie - Ah comprendre - tout fonctionne maintenant comme il se doit - merci beaucoup - vous êtes une star! – onelove

Questions connexes