Есть строка со списком слов. Есть определенное слово, которое нужно найти в этой строке.
Я использую функцию 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
)
)
Никак.
Поиск по сотням тысяч слов, состряпанный на коленке в РНР скрипте будет всегда работать медленно. Для поиска по сотням тысяч слов следует использовать другие механизмы.
Самый простой - поместить слова в базу данных.
Продвижение своими сайтами как стратегия роста и независимости