|
|
|
| Функции array_search, in_array очень быстро ищут в массиве.
Но они дают результат на точное совпадение со значением.
Вопрос: Как можно без потери скорости искать в массиве вхождение значения в элементы массива.
Напимер
$array1 = array( "один", "два", "три", "четыре");
|
Если искать "оди" , то по идее ничего не найдем
Если искать простыми циклами, сравнивать вхождение подстроки в строку, то время поиска возрастет. | |
|
|
|
|
|
|
|
для: Valleri
(12.06.2011 в 15:41)
| | Встроенной функции (написанной на C++) для такого поиска нет, тут волей не волей придется использовать медленные PHP-циклы. | |
|
|
|
|
|
|
|
для: cheops
(12.06.2011 в 15:45)
| | Я сейчас искал в инет. нашел вариант, но оценить затраты времени не могу. Опыта мало у меня.
http://forum.searchengines.ru/showthread.php?t=459678
<?php
$mass=array('primerchik', 'tapki', 'botinki');
$iskomoe="tap";
$key=preg_grep("#tap#", $mass);
echo $key;
?>
|
Может друзьям еще пригодится, а может у кого опыт есть и подскажет потери времени или подберет лучший вариант. | |
|
|
|
|
|
|
|
для: Valleri
(12.06.2011 в 16:09)
| | Регулярные выражения - одни из самых ресурсоемких функций, если нужна скорость - они не лучший выбор. | |
|
|
|
|
|
|
|
для: cheops
(12.06.2011 в 16:15)
| | А есть возможность сравнить временные затраты с перебором в циклах и поиском подстроки в строке? | |
|
|
|
|
|
|
|
для: Valleri
(12.06.2011 в 16:18)
| | Ну да, почему бы нет, например, можно воспользоваться функцией microtime() для отметки времени в начале и в конце, а потом получить разницу вычитанием. Только перед снятием результатов нужно скрипт многократно прогонять - первый вызов брать нельзя - он всегда медленнее последующих. | |
|
|
|
|
|
|
|
для: cheops
(12.06.2011 в 17:07)
| | Извините. а можно спросить у Вас совета, рекомендаций, прежде чем я буду экспериментировать.
Вариант. Если не в массив, а в строку с разделителями элементы массива. Потом искать в общей строке.
Такой вариант может конкурировать, если интересует только логическое условие совпадения или не совпадения искомого в строке. | |
|
|
|
|
|
|
|
для: Valleri
(12.06.2011 в 18:12)
| | Да, так будет гораздо быстрее. | |
|
|
|