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

Форум PHP

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

 

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

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

тема: Быстрый поиск вхождения значения в элементах массива
 
 автор: Valleri   (12.06.2011 в 15:41)   письмо автору
 
 

Функции array_search, in_array очень быстро ищут в массиве.
Но они дают результат на точное совпадение со значением.
Вопрос: Как можно без потери скорости искать в массиве вхождение значения в элементы массива.
Напимер
$array1 = array( "один", "два", "три", "четыре");

Если искать "оди" , то по идее ничего не найдем
Если искать простыми циклами, сравнивать вхождение подстроки в строку, то время поиска возрастет.

  Ответить  
 
 автор: cheops   (12.06.2011 в 15:45)   письмо автору
 
   для: Valleri   (12.06.2011 в 15:41)
 

Встроенной функции (написанной на C++) для такого поиска нет, тут волей не волей придется использовать медленные PHP-циклы.

  Ответить  
 
 автор: Valleri   (12.06.2011 в 16:09)   письмо автору
 
   для: 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;
?>

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

  Ответить  
 
 автор: cheops   (12.06.2011 в 16:15)   письмо автору
 
   для: Valleri   (12.06.2011 в 16:09)
 

Регулярные выражения - одни из самых ресурсоемких функций, если нужна скорость - они не лучший выбор.

  Ответить  
 
 автор: Valleri   (12.06.2011 в 16:18)   письмо автору
 
   для: cheops   (12.06.2011 в 16:15)
 

А есть возможность сравнить временные затраты с перебором в циклах и поиском подстроки в строке?

  Ответить  
 
 автор: cheops   (12.06.2011 в 17:07)   письмо автору
 
   для: Valleri   (12.06.2011 в 16:18)
 

Ну да, почему бы нет, например, можно воспользоваться функцией microtime() для отметки времени в начале и в конце, а потом получить разницу вычитанием. Только перед снятием результатов нужно скрипт многократно прогонять - первый вызов брать нельзя - он всегда медленнее последующих.

  Ответить  
 
 автор: Valleri   (12.06.2011 в 18:12)   письмо автору
 
   для: cheops   (12.06.2011 в 17:07)
 

Извините. а можно спросить у Вас совета, рекомендаций, прежде чем я буду экспериментировать.
Вариант. Если не в массив, а в строку с разделителями элементы массива. Потом искать в общей строке.
Такой вариант может конкурировать, если интересует только логическое условие совпадения или не совпадения искомого в строке.

  Ответить  
 
 автор: cheops   (12.06.2011 в 18:33)   письмо автору
 
   для: Valleri   (12.06.2011 в 18:12)
 

Да, так будет гораздо быстрее.

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

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