array_search — Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в


Основные функции для работы с массивами на PHP, префикс array

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

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

Название большинства функций для работы с массивами начинается на array_, это позволяет быстро применить нужную функцию. Например, в IDE или в каком-либо редакторе может поддерживаться автодополнение, в таком случае разработчику достаточно написать array_ и дальше будут предложены все функции для работы с массивами. Но есть и функции, названия которых нужно запомнить или смотреть справочник. Такие функции начинаются без префикса array_.

Посмотрим, какие есть основные функции в PHP для работы с массивами:

  • array_flip — меняет местами ключи с их значениями в массиве,
  • array_intersect — вычисляет схождение массивов,
  • array_keys — возвращает все или некоторое подмножество ключей массива,
  • array_merge — сливает один или большее количество массивов,
  • array_pop — извлекает последний элемент массива,
  • array_push — добавляет один или несколько элементов в конец массива,
  • array_rand — выбирает один или несколько случайных ключей из массива,
  • array_reverse — возвращает массив с элементами в обратном порядке,
  • array_search — осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае удачи,
  • array_shift — извлекает первый элемент массива,
  • array_slice — выбирает срез массива,
  • array — создает массив,
  • asort — сортирует массив, сохраняя ключи,
  • count — подсчитывает количество элементов массива или что-то в объекте,
  • current — возвращает текущий элемент массива,
  • end — устанавливает внутренний указатель массива на его последний элемент,
  • in_array — проверяет, присутствует ли в массиве значение,
  • key — выбирает ключ из массива,
  • reset — устанавливает внутренний указатель массива на его первый элемент.

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

поиск по массиву

Добрый день пытаюсь реализовать поис по массиву но что то никак не выходит. Задача следующая с помощью функции
PHP

создается массив из фаила. существует переменная $adres которая передается через форму переменная текстовая. нужен обычный поиск по массиву и условие if else. Если в массиве есть допустим слово adres то выводить такое слово уже есть если нет такого слова в массиве то ничего не делать. Пробовал функцию
PHP

Пробовал разные вариации. но что то не работает ничего. Подскажите в чем трабла ??

3 июля 2012 г. 12:56, спустя 18 минут 10 секунд

3 июля 2012 г. 12:59, спустя 3 минуты 28 секунд

array_search — Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в случае удачи
http://ru2.php.net/manual/ru/function.array-search.php

Это я понял только вот почему то мне он абсолютно ничего не возвращает. Не на локальном сервере не на двух хостингах разных. Такое ощющение что функция просто не работает

3 июля 2012 г. 13:11, спустя 12 минут 7 секунд

PHP array_search: поиск значения в массиве

Одна из основных операций при работе с массивами — поиск конкретного значения. Для этого предназначена функция PHP array_search(). Она способна обрабатывать как одномерные, так и ассоциативные коллекции, возвращая ключ искомого значения, если оно обнаружено в массиве.

Синтаксис

Формализованное описание функции array_search() в PHP выглядит следующим образом:

  • $collection — массив, в котором будет произведен поиск;
  • value — искомое значение любого типа;
  • strict — необязательный логический флаг, устанавливающий строгий механизм сравнения с учетом типов.

Механизм работы

Функция PHP array_search() поочередно сравнивает value со всеми значениями в массиве collection. По умолчанию, сравнение осуществляется без учета типов операндов. Эту настройку можно изменить, установив для флага strict значение TRUE. Сравнение строк осуществляется с учетом регистра.

При обнаружении совпадения возвращается ключ, соответствующий найденному элементу, и работа функции прекращается. Следовательно, с ее помощью нельзя обнаружить множественное вхождение искомого значения в массив.

Если совпадений не найдено, функция вернет булево значение FALSE.

Проверять возвращенный результат следует с помощью оператора строгого равенства (===). Это важно, так как функция может вернуть значение, которое приводится к FALSE, например, 0 или пустую строку.

Примеры использования

Пример 1. При передаче в функцию PHP array_search() многомерного массива, результатом работы будет ключ искомого элемента.

В этом примере переменная $result1 получит значение «season1», $result2 будет равна «season3», а $result3 будет присвоено булево значение FALSE, так как строка «april» не встречается в исходном массиве.

Илон Маск рекомендует:  Пример использования setTimeout. Java Script

Пример 2. Функция PHP array_search() может обрабатывать и одномерный массив, считая его ключи следующими по порядку числовыми индексами.

Переменной $result будет присвоено значение 1, согласно индексу элемента «охотник» в массиве $array.

Пример 3. Возможная ошибка при анализе результата.

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

Пример 4. Возвращается только ключ первого обнаруженного совпадения.

Несмотря на то, что искомое значение встречается в массиве трижды, функция вернет только первый найденный результат — 0. Для поиска множественных совпадений рекомендуется использовать функцию PHP array_keys().

PHP: Поиск в массиве

Поиск значения в массиве требуется практически в каждом PHP приложении, скрипте работающим с данными, для чего существует множество способов и специальных функций. В зависимости от задачи и типа поиска следует использовать те или иные инструменты, учитывая их особенности, скорость выполнения и удобство в применении. Далее мы ознакомимся с PHP функциями поиска элементов в массиве, возможными конструкциями и методами, а также выясним какой способ наиболее быстрый.

Функции для поиска в массиве:
array_search — служит для поиска значения в массиве. В случае удачи она возвращает ключ искомого значения, если ничего не найдено — возвращает FALSE. До версии PHP 4.2.0, array_search() при неудаче возвращала NULL, а не FALSE.

Синтаксис функции mixed array_search ( mixed needle, array haystack [, bool strict] ).

Если значение 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 при успехе

Возвращает ключ элемента массива при успехе

while — цикл, с помощью которого также можно произвести поиск элемента в массиве. Подробнее о самой конструкции, тут.

Синтаксис конструкции
while (expr)
statement

Возвращает ключ элемента массива при успехе

Из выше описанных примеров видно, что одни методы служат для поиска элемента в одномерных массивах, другие позволяют организовать поиск в многомерных массивах. Выбор метода зависит от типа обрабатываемых данных, будь то простой массив, или сложные многомерные деревья.

Далее произведем замер среднего времени выполнения функций поиска:

Число элементов массива 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, показывает наилучший результат как при поиске в малых так и больших массивах. При этом время поиска спомощью циклов значительно увеличивается в зависимости от размера массива.

В параметре Haystack необходимо указать массив, в котором происходит поиск.

Если третий параметр Strict установлен в TRUE, то функция Array_search будет искать идентичные элементы в Haystack. Это означает, что также будут проверяться типы Needle в Haystack, а объекты должны быть одним и тем же экземпляром.

Функция Array_search возвращает ключ для Needle, если он был найден в массиве, иначе FALSE.

Если искомое значение присутствует в массиве более одного раза, будет возвращен первый найденный ключ. Для того, чтобы возвратить ключи для всех найденных значений, используйте функцию Array_keys с необязательным параметром Search_value.

Используйте оператор «===» для проверки значения, возвращаемого этой функцией, поскольку данная функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Двоичные данные (Boolean).

Как осуществить поиск нескольких значений в массиве?

Здравствуйте
функция array_search ищет одно значение в массиве.

Каким образом реализовать следующие: что бы в массиве «A» искались все значения из другого массива «B» и если если массив «A» содержит все эти значения, выводилось бы TRUE
___________________________________________________
например Array «A»
(
[0] => свойство1
[1] => свойство2
[2] => свойство4
[3] => свойство6
[4] => свойство12
[5] => свойство16
)
например Array «B»
(
[0] => свойство3
[1] => свойство6
(количество элементов может быть любое)
)
в данном случае что бы выдавалось FALSE
___________________________________________________
например Array «A»
(
[0] => свойство1
[1] => свойство2
[2] => свойство4
[3] => свойство6
[4] => свойство12
[5] => свойство16
)
например Array «B»
(
[0] => свойство4
[1] => свойство6
(количество элементов может быть любое)
)
а здесь TRUE

Илон Маск рекомендует:  Что такое код asp mimetype

Удаление элемента массива по значению (не по ключу)

Очень часто при разработке веб-приложений требуется удалить элемент массива. Обычно это делается так:

В данном примере мы удаляем элемент массива с ключом name.

Но иногда бывают такие ситуации, когда нам известно лишь значение массива, а не его ключ. Как быть в такой ситуации?

Как удалить элемент массива по значению?

Ответ на самом деле прост. Делается это так:

Функция array_search() — ищет в массиве заданное значение и возвращает соответствующий ключ, в случае успеха. Если значение не найдено возвращает FALSE.

Используя эту функцию, узнаем ключ массива, и затем обычным способом удаляем элемент массива при помощи функции unset().

Надеюсь данный материал был Вам полезен! Успехов!

Магия PHP // PHP

Ага, вот эти ребята, сейчас я покажу Вам настоящую магию из мира PHP.

Вместо предисловия. Об авторах языка

Точнее о траве которую курили разработчики, ну как так можно именовать функции? Ну возьмем для примера функции для работы со строками:

  • str_replace( ищем строку $search, заменяем на $replace, в строке $subject [, итого поменяли &$count ] )
  • strpos( в строке $haystack , ищем $needle [, пропускаем $offset символов] )
  • substr_replace( в строке $string , заменям на $replacement , с позиции $start [, $length ])
  • nl2br( изменяем строку $string [, это $is_xhtml ] )

Как мы видим это очень мрачно, а если брать массивы – в одном месте у нас функция возвращает результат, в другом – работает по ссылке… брр…

Благодаря отсутвию стандартов даже в самом языке, мы имеем некий дискомфорт при работе с данным языком. Да и другие косятся…


PHP это неправильный язык программирования

Эту сказку я частенько слышу. Решил я написать какой-то такой наглядный код, чтобы сразу было понятно, PHP — это ого-го-го :)

Решил, и написал – на Ruby пару классов, которые будут представлять из себя обертку для строк и масивов. Данные классы включают в себя лишь часто используемые функции (по моему скромному мнению), а вызов остальных возложил на рефлексию.

Массив – oArray

Данный класс включает в себя стандартные функции.

  • array_diff — Вычислить расхождение в массивах
  • array_fill — Заполнить массив определенным значением
  • array_filter — Применяет фильтр к массиву, используя функцию обратного вызова
  • array_flip — Поменять местами значения массива
  • array_key_exists — Проверить, присутствует ли в массиве указанный ключ или индекс
  • array_keys — Выбрать все ключи массива
  • array_map — Применить функцию обратного вызова ко всем элементам указанных массивов
  • array_pop — Извлечь последний элемент массива
  • array_product — Вычислить произведение значений массива
  • array_push — Добавить один или несколько элеметов в конец массива
  • array_rand — Выбрать одно или несколько случайных значений из массива
  • array_reverse — Возвращает массив с элементами в обратном порядке
  • array_search — Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в случае удачи
  • array_shift — Извлечь первый элемент массива
  • array_slice — Выбрать срез массива
  • array_splice — Удалить последовательность элементов массива и заменить её другой последовательностью
  • array_sum — Вычислить сумму значений массива
  • array_unique — Убрать повторяющиеся значения из массива
  • array_unshift — Добавить один или несколько элементов в начало массива
  • array_values — Выбрать все значения массива
  • sort — Отсортировать массив
  • rsort — Отсортировать массив в обратном порядке
  • natsort — Отсортировать массив, используя алгоритм “natural order”
  • natcasesort — Отсортировать массив, используя алгоритм “natural order” не принимая во внимание регистр символов
  • ksort — Отсортировать массив по ключам
  • krsort — Отсортировать массив по ключам в обратном порядке
  • implode — Объединяет элементы массива в строку

А так же немного полезной отсебячины:

  • to_url — Обертка для http_build_query
  • clear — Убрать пустые элементы массива
  • odd — Оставить лишь нечетные элементы
  • even — Оставить лишь четные элементы
  • size — Врапер для функции sizeof

Для всех функций вида array_* сей префикс я убрал (ведь мы и так знаем, что работает с массивом), остальный функции – на совести метода __call и рефлексии.

Строка – oString

Данный класс включает в себя стандартные функции.

  • addslashes — Экранирует спецсимволы в строке
  • count_chars — Возвращает информацию о символах, входящих в строку
  • crc32 — Вычисляет CRC32 для строки
  • crypt — Необратимое шифрование (хэширование)
  • explode — Разбивает строку на подстроки
  • html_entity_decode — Преобразует HTML сущности в соответствующие символы
  • htmlentities — Преобразует символы в соответствующие HTML сущности
  • htmlspecialchars_decode — Преобразует специальные HTML-сущности обратно в соответствующие символы
  • htmlspecialchars — Преобразует специальные символы в HTML сущности
  • ltrim — Удаляет пробелы из начала строки
  • md5 — Возвращает MD5 хэш строки
  • money_format — Форматирует число как денежную величину
  • nl2br — Вставляет HTML код разрыва строки перед каждым переводом строки
  • number_format — Форматирует число с разделением групп
  • parse_str — Разбирает строку в переменные
  • rtrim — Удаляет пробелы из конца строки
  • sha1 — Возвращает SHA1 хэш строки
  • sprintf — Возвращает отформатированную строку
  • str_pad — Дополняет строку другой строкой до заданной длины
  • str_repeat — Возвращает повторяющуюся строку
  • str_replace — Заменяет строку поиска на строку замены
  • str_ireplace — Регистро-независимый вариант функции str_replace()
  • str_word_count — Возвращает информацию о словах, входящих в строку
  • strip_tags — Удаляет HTML и PHP тэги из строки
  • stripslashes — Удаляет экранирование символов, произведенное функцией addslashes()
  • strstr — Находит первое вхождение подстроки
  • stristr — Регистро-независимый вариант функции strstr()
  • strpos — Возвращает позицию первого вхождения подстроки
  • stripos — Возвращает позицию первого вхождения подстроки без учета регистра
  • strrpos — Возвращает позицию последнего вхождения символа
  • strripos — Возвращает позицию последнего вхождения подстроки без учета регистра
  • strrev — Переворачивает строку
  • strtolower — Преобразует строку в нижний регистр
  • strtoupper — Преобразует строку в верхний регистр
  • substr_count — Возвращает число вхождений подстроки
  • substr_replace — Заменяет часть строки
  • substr — Возвращает подстроку
  • trim — Удаляет пробелы из начала и конца строки
  • ucfirst — Преобразует первый символ строки в верхний регистр
  • ucwords — Преобразует в верхний регистр первый символ каждого слова в строке
  • wordwrap — Выполняет перенос строки на данное количество символов с использованием символа разрыва строки
Илон Маск рекомендует:  Шаблон сайта дизайн-оформление HTML, CSS, JavaScripts, 5 страниц

А так же немного полезной отсебячины:

  • add — Конкатенация строк
  • insert — Вставка строки в строку
  • size — Врапер для функции strlen

Для всех функций вида str_* и str* сей префикс был убран.

Так же выделил функции для работы с URL – и запихнул их в отдельный класс (oUrl):

Слайды

Теперь приведу пример использования сего творения:

Как Вам? Даю еще пищу для мозга:

Объект – oObject

Даже обычный класс можно улучшить – добавив ему хитрые гетеры/сетеры для свойств объекта (я это подсмотрел в RoR):

В результате сей махинации мы получим следующий результат:

Как видим – подобный класс даже имеет право на существование ;)

Вот такое нехитрое творение у меня получилось, скачать его можете по следующей ссылке:

PHP: array_search — быстрый поиск по массиву

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

Сравнил скорость поиска в массиве с помощью этой функции с обычным перебором массива в циклах foreach и while. На 10-100 элементах массива разница незаметна да и время столь мало, что им можно принебречь. А вот для больших массивов разница оказалась весьма существенной. С увеличением размера массива на порядок, значительно увеличивалось и время поиска. При ста тысячах элементов скорость foreach падала до 0,013 секунды, а while — до 0,017, при том что array_search() тоже замедлился, но все-таки остался на порядок быстрее — 0.004 секунды. Для большого скрипта, работающего с большими массивами замена поиска в цикле на поиск с помощью array_search() будет вовсе не «блошиной оптимизацией».

UPD: добавил в циклы break и менял искомое значение так, чтобы оно было в середине массива — 5-50-500 и т.д. Данные в таблице обновленные.

Число элементов массива 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

В связи с этим вспомнил недавнюю дискуссию с одним из коллег на работе — насчет того, нужно ли программисту знать все эти встроенные функции языка, или достаточно «программистского склада ума» и общих познаний. Не вдаваясь с рассуждения об этом самом складе ума, думаю, что все-таки знать функции надо, может быть не весь синтаксис в деталях, а хотя-бы какие функции есть и что они в общих чертах могут.

UPD: нужен программистский склад ума, тоже нужен! И внимательность с памятью не помешают (навеяно break и range :)

Под хабракатом код скрипта, которым подсчитывал время:

$mass=100000; // число значений в массиве в котором будем искать
$search=50000; // в массиве будем искать это значение
$first_result=array(); // массив результатов, для вычисления среднего значения первого варианта
$second_result=array(); // массив результатов, для вычисления среднего значения второго варианта
$third_result=array(); // массив результатов, для вычисления среднего значения третьего варианта

// создаем и наполняем массив
$test_array = range(0, $mass-1); // спасибо SelenIT ))

Поиск значения внутри массива и возвращаемого ключа

Мой массив выглядит так:

Можно ли выполнить поиск по массиву, например. для 8 и затем вернуть номер ключа, под которым находилось значение?

Например. 95 находится внутри ключа №. 2 , то, если он найдет 95 он должен вернуть 2 — и FALSE противном случае. Другой пример: 11 был найден внутри ключа №. 1 , то он должен возвращать 1 и FALSE противном случае.

Есть ли такая функция PHP для этого?

Я думаю, вы ищете array_walk() и/или array_walk_recursive().

Легкий пирог. Я думаю, вы могли бы разобраться в себе.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL