我想知道是否有人可以帮我解决一些我似乎无法解决的问题 - 我的 此刻头脑转了一圈......
好的我有一个包含大量信息的.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;
}
?>
提前感谢您的任何帮助 - 仍在学习: - )
答案 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;
}
}
}