[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск совпадений в тексте из массива
gam0ra
Привет!)
Допустим есть такой вот текст в переменой $str

$str = 'Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные
генераторы, создающие собственные варианты текста на основе оригинального трактата,
благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.'
;

И есть массив $arr в нем список из слов которые нужно найти в $str если совпадения имеются

$arr = array('существует','специальные','зеленый','метро','получить');

Вот что я сделал

//$str и $arr выше

$newStr .= $str;//$newStr нужна чтобы нарваться на повторение

foreach($arr as $key=>$val){
if(is_numeric(mb_stripos($newStr,$val))){
$p = "/$val/";
$newStr = preg_replace($p,"",$newStr,1);//если совпадение найдено то текст с вырезанном словом будет записан
}
}


exit($newStr);

Все норм работает НО
Проблема в том что если массив большой и текстов несколько то такой способ очень долгий
Может доходить до нескольких минут!(
Есть ли способ сделать хитрее и быстрее?)
Игорь_Vasinsky
$str = 'Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные
генераторы, создающие собственные варианты текста на основе оригинального трактата,
благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.'
;


$arr = array('существует','специальные','зеленый','метро','получить');

$pattern = implode("|", $arr);

if(preg_match("#".$pattern."#ui", $str)){
echo 'Found !';
}
else{
echo 'Not found !';
}


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
gam0ra
Игорь_Vasinsky
Спасибо) c preg_match_all вобще норм

if(preg_match_all("#".$pattern."#ui", $str, $m)){
print_r($m);
}
else{
echo 'Not found !';
}


Array
(
[0] => Array
(
[0] => существует
[1] => специальные
[2] => получить
)

)

Еще может способы есть?)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.