|
|
|
| Добрый день, возник такой вопрос.
Вот preg_grep() ищет в массиве вхождения которые соответствуют заданному шаблону.
Есть ли функция которая делает наоборот. Тоесть в качестве источника поиска используется строка, а в качестве шаблонов значения из массива?
<?
$str = 'Шла Саша по шоссе и сосала сушку';
$array = ('Саша', 'Мама', 'и', 'мыла', 'шоссе', 'раму');
$result =array('Саша', 'и', 'шоссе');
?>
|
Конечно это все можно сделать просто в цикле перебором значений, но это слишком долго, особенно когда массивы состоят из десятков тысяч вариантов. | |
|
|
|
|
|
|
|
для: Ученик
(22.04.2011 в 17:22)
| | Вы можете получить разницу между результатом функции preg_grep() и исходным массивом при помощи функции array_diff() - это будет аналогично использованию обратной функции preg_grep(). | |
|
|
|
|
|
|
|
для: cheops
(22.04.2011 в 17:31)
| | Проблема в том, что у нас строка а не массив, в котором нужно производить поиск. И да если поиск производиться по словам, можно разбить через пробелы и потом сравнить 2 массива. Но там могут быть целые фразы(поэтому я и спросил про обратный аналог preg_grep), и их нельзя разбивать потому что получим совсем не то что хотелось.
<?
$str = 'Шла Саша по шоссе и сосала сушку';
$array = ('Саша по шоссе', 'Мама', 'и', 'мыла', 'шоссе', 'раму');
$result =array('Саша по шоссе', 'и', 'шоссе');
?>
|
Хеопс рад вас видеть, и рад что вы все еще поддерживаете свой форум. Я очень давно начинал здесь, и помню как вы помогали новичкам.
Я знаю что вы всегда советовали под новые вопросы создавать новые темы. Но спрошу тут, так как это напрямую связанно. Возможно вы знаете какие-то нестандартные библиотеки PHP которые сравнивают строки.
К примеру stristr за секунду делает 300-500 тыс сравнений, в зависимости от длины строк. А мне нужно минимум в 5 раз быстрее, или php совсем не подходить для таких операций? | |
|
|
|
|
|
|
|
для: Ученик
(22.04.2011 в 18:26)
| | >А мне нужно минимум в 5 раз быстрее, или php совсем не подходить для таких операций?
Попробуйте поместить в MEMORY-таблицу MySQL, проиндексировать строки и сравнивать средствами MySQL, если MySQL вынесена на отдельный сервер с большим количеством памяти и мощным процессором - может получиться быстрее, чем в PHP.
PS Под новые вопросы, лучше действительно заводить новые темы, тем более что модератор тему располосует на несколько как только заметит обсуждение нескольких вопросов в одной теме. | |
|
|
|
|
|
|
|
для: Ученик
(22.04.2011 в 17:22)
| | Специальной функции нет, придется делать массивом. Собственно регулярные выражения это не самая быстрая штука, не думаю, что цикл тут много съест по сравнению с ними. Можно попробовать регулярные выражения MySQL - там эту задачу можно побыстрее попытаться решить, так как СУБД предназначена для быстрой работы с множествами. | |
|
|
|