Многократное соответствие слова поиска с использованием 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;
}
?>
Заранее спасибо за любую помощь - все еще учусь :-)