1

我想知道是否有人可以帮助解决我似乎无法解决的小问题 - 我的头此刻正在转圈......

好的,我有一个包含大量信息行的 .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;
}

?>

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

4

1 回答 1

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

    }
}
于 2012-12-12T20:32:22.890 回答