Добрый вечер, пользователи тостера.
У меня есть худо-бедно работающий модуль на PHP, который выводит строку с ключевым словом, которая ищется в файлах на сервере. Теперь мне необходимо, чтоб при поиске, допустим, слова "Москва" так же выводилось "Москве", "Москвой"....
Вот мой код<?php
function getFiles() {
$dir = './files';
$files = array_diff(scandir($dir), array('..', '.'));
foreach ($files as $key => $value) {
// echo $value . ', ';
}
return $files;
}
function search($fileName, $searchText, $pattern) {
$contents = file_get_contents('./files/' . $fileName);
if (preg_match_all($pattern, $contents, $matches)) {
echo "<span class = 'spoiler'>Результат поиска в файле: $fileName</span>
<div class = 'spoiler-content'>";
$string = implode($matches[0], "<br>");
$search = preg_quote($searchText);
$string = preg_replace("/($search)/iu", "<span style='background-color: #44FF00'>$1</span>", $string);
echo $string;
echo "</div>";
} else {
echo "Нет совпадений в файле " . $fileName;
}
}
function searchAnyWord() {
if ($_POST['word'] != '' && $_POST['word'] != ' ') {
$arSeacrh = GetFiles();
$searchText = $_POST['word'];
foreach ($arSeacrh as $k=>$fileName) {
search($fileName, $searchText, "/^.*?$searchText.*$/imu");
echo "<br>";
}
} else {
echo '<span style="color: #D10000">Ошибка, заполните поле поиска!</span>';
}
}
function searchSpecWord() {
if ($_POST['word'] != '' && $_POST['word'] != ' ') {
$arSeacrh = GetFiles();
$searchText = $_POST['word'];
foreach ($arSeacrh as $k=>$fileName) {
search($fileName, $searchText, "/^.*?$searchText.*$/mu");
echo "<br>";
}
} else {
echo '<span style="color: #D10000">Ошибка, заполните поле поиска!</span>';
}
}
function changeOptions() {
if ($_POST['anyWord'] == true) {
searchAnyWord();
} else {
searchSpecWord();
}
}
changeOptions();
?>
UPD: Нужна помощь с тем, как применить stemmer. Пробовал много раз, но я так и не понимаю что у себя поменять, чтоб выводилось корректно всё......
UPD: Разобрался, спасибо!