使用strpos多个搜索词匹配(Multiple search word matching usin

2019-08-03 23:50发布

我想知道如果任何人都可以用一个小问题,我似乎无法修复帮助 - 我的头此刻正转圈圈......

好吧,我有信息的无数条线.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;
}

?>

在此先感谢您的帮助 - 仍然在学习:-)

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

    }
}


文章来源: Multiple search word matching using strpos
标签: php strpos