Интересно, может ли кто-нибудь помочь с небольшой проблемой, которую я не могу исправить – моя голова крутится в кругах на данный момент …
Ok У меня есть .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; } ?>
Заранее спасибо за любую помощь – все еще учась 🙂
Вот мой код:
$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; } } }