PHP: Поиск в массиве
Поиск значения в массиве требуется практически в каждом PHP приложении, скрипте работающим с данными, для чего существует множество способов и специальных функций. В зависимости от задачи и типа поиска следует использовать те или иные инструменты, учитывая их особенности, скорость выполнения и удобство в применении. Далее мы ознакомимся с PHP функциями поиска элементов в массиве, возможными конструкциями и методами, а также выясним какой способ наиболее быстрый.
Функции для поиска в массиве:
array_search — служит для поиска значения в массиве. В случае удачи она возвращает ключ искомого значения, если ничего не найдено — возвращает FALSE. До версии PHP 4.2.0, array_search() при неудаче возвращала NULL, а не FALSE.
Синтаксис функции mixed array_search ( mixed needle, array haystack [, bool strict] ).
$array = array(12, 17, 22, 79); $key = array_search(17, $array, true); // $key = 1; $key = array_search("17", $array); // $key = 1; $key = array_search("17", $array, true); // FALSE; |
Если значение needle (то, что ищем в массиве), является строкой, то производится регистро-зависимое сравнение.
Если передать в функцию в качестве третьего параметра (это не обязательно) значение TRUE, то поиск будет производится с учетом типа переменной.
Стоит учитывать, если искомое значение встречается в массиве несколько раз, то функция вернет только один — первый найденный ключ.
in_array — Проверяет, присутствует ли в массиве значение, в случае успеха возвращает TRUE, неудачи FALSE. Как вы понимаете функция служит для поиска и определения наличия элемента в массиве, ключ на сам же элемент не возвращается.
Синтаксис функции bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
Функции для перебора элементов массива, с последующим поиском:
foreach — Перебирает элементы массива, работает только с массивами и объектами, в случае использования переменных отличного типа, PHP выдаст ошибку.
Возможны два вида синтаксиса (подробнее тут):
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
Пример использования функции с конструкцией foreach для поиска элемента массива, возвращает TRUE при успехе
function IsInArray($array , $findme) { foreach ($array as $c) { if (strpos(strtolower($c), strtolower($findme)) !== false ) return true; } return false; } |
Возвращает ключ элемента массива при успехе
function IsInArray($array , $findme) { foreach ($array as $key => $value) { if (strpos(strtolower($value), strtolower($findme)) !== false ) return $key; } return false; } |
while — цикл, с помощью которого также можно произвести поиск элемента в массиве. Подробнее о самой конструкции, тут.
Синтаксис конструкции
while (expr)
statement
Возвращает ключ элемента массива при успехе
function IsInArray($array , $findme) { // определяем длину массива $count=count($array); $j=0; // сам поиск while ($j<$count) { if ($array[$j]==$findme) // если нашли { return $array[$j]; break; } $j++; } } |
Из выше описанных примеров видно, что одни методы служат для поиска элемента в одномерных массивах, другие позволяют организовать поиск в многомерных массивах. Выбор метода зависит от типа обрабатываемых данных, будь то простой массив, или сложные многомерные деревья.
Далее произведем замер среднего времени выполнения функций поиска:
| Число элементов массива | array_search | Цикл foreach | Цикл while |
| 10 | 0.0000068 | 0.0000064 | 0.0000076 |
| 100 | 0.0000078 | 0.0000153 | 0.0000185 |
| 1000 | 0.0000209 | 0.0001177 | 0.0001351 |
| 10000 | 0.0004210 | 0.0012128 | 0.0018670 |
| 100000 | 0.0039679 | 0.0130989 | 0.0175215 |
Из приведенной таблицы замеров видно, что функция array_search, показывает наилучший результат как при поиске в малых так и больших массивах. При этом время поиска спомощью циклов значительно увеличивается в зависимости от размера массива.

Автор:






