使用strpos进行多个搜索词匹配

时间:2012-12-12 20:26:01

标签: php strpos

我想知道是否有人可以帮我解决一些我似乎无法解决的问题 - 我的 此刻头脑转了一圈......

好的我有一个包含大量信息的.txt文件 - 我正在尝试匹配关键字 用这些线并显示一定数量的匹配线。

我把这个脚本放在一起,虽然它有效但它只匹配一行 单词与搜索单词的顺序相同。

此刻作为一个例子:

搜索词:

红帽

.txt文件中的行:

这是我的红帽子 我的帽子是红色的 这顶帽子是绿色的 这是一条红色的围巾 你的红帽很好

由于脚本目前正匹配并显示第1,5行

但是我想匹配并显示第1,2,5行

任何顺序,但所有单词必须存在才能匹配。

我已经查看过这里和其他地方的大量帖子,我理解这一点 我们需要的是爆炸字符串然后在循环中搜索每个单词但是 我不能让它工作,尽管尝试了几种不同的方式,因为它只是返回 同一行多次。

在失去我留下的头发之前,任何帮助都会受到赞赏:-)

这是我目前正在使用的代码 - 搜索变量已经存在 设置:

<?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;
}

?>

提前感谢您的任何帮助 - 仍在学习: - )

1 个答案:

答案 0 :(得分:1)

这是我的代码:

$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;
        }

    }
}