Итак, у меня есть следующая функция:
function findMatches($pathToDirectory, $keyword){
$results = array();
$htmlString = "";
$fileList = glob($pathToDirectory);
natsort($fileList);
foreach ($fileList as $search) {
$contents = file_get_contents($search);
$episodeTitle = fgets(fopen($search, 'r'));
$episodeTitle = "<p class='episode_title'>$episodeTitle</p>";
$sentences = preg_split('/(?<=[.])\s+(?=[a-z])/i', $contents);
foreach ($sentences as $sentence) {
if (strpos($sentence, $keyword)) {
if (!in_array($episodeTitle, $results)) {
array_push($results, $episodeTitle);
}
array_push($results, $sentence);
}
}
}
foreach ($results as $result){
$highlightedKeyword = '<span class="keyword_highlight">' . $keyword . '</span>';
$newResult = str_replace($keyword, $highlightedKeyword, $result);
$htmlString .= '<p class="search_result">' . $newResult . '</p>';
}
$totalResults = 'Total Results: <span class=\'number_result\'>' . count($results) . '</span>';
return $htmlString = $totalResults . $htmlString;
}
Она открывает каждый текстовый файл в каталоге ($filelist
), берет его содержимое, разбивает его на предложения ($sentences
), а затем сохраняет предложения, содержащие определенное пользователем ключевое слово, в массив ($results
). Затем он выполняет итерацию через $results
, чтобы обернуть ключевое слово в HTML (так, чтобы слово было выделено в предложении для пользователя), и, наконец, он заключает каждое предложение в HTML и отправляет их для представления пользователю. .
Однако в настоящее время функция чувствительна к регистру. Какой хороший способ сделать регистр нечувствительным? Я попытался использовать stripos()
вместо strpos()
в foreach ($sentences as $sentence)
l oop, и это сделало сам поиск нечувствительным к регистру (как я хочу), но проблема в том, что я не мог понять, как выделить оба верхних и строчные версии слова правильно, если я написал функцию таким образом.
Также, пожалуйста, дайте мне знать, если вам нужны разъяснения по любому из этого, я не уверен, что объяснил это слишком хорошо