Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: preg_grep наоборот
 
 автор: Ученик   (22.04.2011 в 17:22)   письмо автору
 
 

Добрый день, возник такой вопрос.
Вот preg_grep() ищет в массиве вхождения которые соответствуют заданному шаблону.
Есть ли функция которая делает наоборот. Тоесть в качестве источника поиска используется строка, а в качестве шаблонов значения из массива?


<?
$str 
'Шла Саша по шоссе и сосала сушку';
$array = ('Саша''Мама''и''мыла''шоссе''раму');

$result =array('Саша''и',  'шоссе'); 
?>

Конечно это все можно сделать просто в цикле перебором значений, но это слишком долго, особенно когда массивы состоят из десятков тысяч вариантов.

  Ответить  
 
 автор: cheops   (22.04.2011 в 17:31)   письмо автору
 
   для: Ученик   (22.04.2011 в 17:22)
 

Вы можете получить разницу между результатом функции preg_grep() и исходным массивом при помощи функции array_diff() - это будет аналогично использованию обратной функции preg_grep().

  Ответить  
 
 автор: Ученик   (22.04.2011 в 18:26)   письмо автору
 
   для: cheops   (22.04.2011 в 17:31)
 

Проблема в том, что у нас строка а не массив, в котором нужно производить поиск. И да если поиск производиться по словам, можно разбить через пробелы и потом сравнить 2 массива. Но там могут быть целые фразы(поэтому я и спросил про обратный аналог preg_grep), и их нельзя разбивать потому что получим совсем не то что хотелось.

<? 
$str 
'Шла Саша по шоссе и сосала сушку'
$array = ('Саша по шоссе''Мама''и''мыла''шоссе''раму'); 

$result =array('Саша по шоссе''и',  'шоссе');  
?>


Хеопс рад вас видеть, и рад что вы все еще поддерживаете свой форум. Я очень давно начинал здесь, и помню как вы помогали новичкам.
Я знаю что вы всегда советовали под новые вопросы создавать новые темы. Но спрошу тут, так как это напрямую связанно. Возможно вы знаете какие-то нестандартные библиотеки PHP которые сравнивают строки.
К примеру stristr за секунду делает 300-500 тыс сравнений, в зависимости от длины строк. А мне нужно минимум в 5 раз быстрее, или php совсем не подходить для таких операций?

  Ответить  
 
 автор: cheops   (22.04.2011 в 19:08)   письмо автору
 
   для: Ученик   (22.04.2011 в 18:26)
 

>А мне нужно минимум в 5 раз быстрее, или php совсем не подходить для таких операций?
Попробуйте поместить в MEMORY-таблицу MySQL, проиндексировать строки и сравнивать средствами MySQL, если MySQL вынесена на отдельный сервер с большим количеством памяти и мощным процессором - может получиться быстрее, чем в PHP.

PS Под новые вопросы, лучше действительно заводить новые темы, тем более что модератор тему располосует на несколько как только заметит обсуждение нескольких вопросов в одной теме.

  Ответить  
 
 автор: cheops   (22.04.2011 в 19:13)   письмо автору
 
   для: Ученик   (22.04.2011 в 17:22)
 

Специальной функции нет, придется делать массивом. Собственно регулярные выражения это не самая быстрая штука, не думаю, что цикл тут много съест по сравнению с ними. Можно попробовать регулярные выражения MySQL - там эту задачу можно побыстрее попытаться решить, так как СУБД предназначена для быстрой работы с множествами.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования