PHP Поиск в файлах по ключевому слову (без учета регистра)? - PullRequest
0 голосов
/ 10 июля 2020

Итак, у меня есть следующая функция:

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, и это сделало сам поиск нечувствительным к регистру (как я хочу), но проблема в том, что я не мог понять, как выделить оба верхних и строчные версии слова правильно, если я написал функцию таким образом.

Также, пожалуйста, дайте мне знать, если вам нужны разъяснения по любому из этого, я не уверен, что объяснил это слишком хорошо

1 Ответ

0 голосов
/ 10 июля 2020

Вам нужно использовать stripos(), а также str_ireplace(), когда вы делаете выделение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...