Есть строка со списком слов. Есть определенное слово, которое нужно найти в этой строке.
Я использую функцию strpos()
, всё ок:
$mystring = 'apple,orange,pear,banana,mango';
$findme = 'apple';
$pos = strpos($mystring, $findme);
if ($pos !== false) {
echo "Строка '$findme' найдена в строке '$mystring'";
echo " в позиции $pos";
} else {
echo "Строка '$findme' не найдена в строке '$mystring'";
}
Однако, я хотел бы сделать поиск немного гибким, чтобы поиск осуществлялся по частям искомого слова. Например, слово для поиска будет не "apple", а "pineapple". В нашем случае функция ничего не найдет.
Я думаю, что можно эту задачу можно решить путем поиска каждого слова из списка
в строке $findme
:
$mystring = 'apple,orange,pear,banana,mango';
$findme = 'pineapple';
$arr= explode(",", $mystring );
foreach($arr as $v){
$pos = strpos($findme, $v);
if ($pos !== false) {
echo "Строка '$findme' найдена в строке '$mystring'";
echo " в позиции $pos";
break;
} else {
echo "Строка '$findme' не найдена в строке '$mystring'";
}
}
Но а если словарь $mystring
состоит из сотен тысяч слов. Тогда мой вариант будет работать очень медленно.
Подскажите, пожалуйста, как можно решить эту проблему?
Спасибо!
С помощью регулярных выражений, поиск не точных вхождений в подстроку можно организовать так:
$mystring = 'apple,orange,pear,banana,mango and pineapple';
$findme = 'apple';
$patt = preg_quote($findme, '~');
preg_match_all("~\w*$patt\w*~", $mystring, $arr);
print_r($arr);
Результат
Array
(
[0] => Array
(
[0] => apple
[1] => pineapple
)
)
нужно, чтобы строка $mystring = $mystring = 'apple,orange,pear,banana,mango', а $findme = 'pineapple'; И в $matches я увидел результат, что найдено
Тогда можно исходную строку использовать как шаблон:
$mystring = 'apple,orange,pear,banana,mango';
$findme = 'pineapple';
$patt = join('|', explode(',', $mystring));
preg_match_all("~$patt~", $findme, $arr);
print_r($arr);
Результат:
Array
(
[0] => Array
(
[0] => apple
)
)
Никак.
Поиск по сотням тысяч слов, состряпанный на коленке в РНР скрипте будет всегда работать медленно. Для поиска по сотням тысяч слов следует использовать другие механизмы.
Самый простой - поместить слова в базу данных.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
коллеги помоги правильно написать запрос столкнулся с проблемой что нужно вывести определенно количество записей с определенным параметром...
Как перенаправлять запросы с помощьюhtaccess и сделать исключение
Друзья, я не силен в PHP и Ajax, по этому прошу помощиИмеется файл простой index