Одна из основных операций при работе с массивами - поиск конкретного значения. Для этого предназначена функция PHP array_search(). Она способна обрабатывать как одномерные, так и ассоциативные коллекции, возвращая ключ искомого значения, если оно обнаружено в массиве.
Синтаксис
Формализованное описание функции array_search() в PHP выглядит следующим образом:
mixed array_search (mixed value, array $collection [, bool strict])
Входные параметры:
- $collection - массив, в котором будет произведен поиск;
- value - искомое значение любого типа;
- strict - необязательный логический флаг, устанавливающий строгий механизм сравнения с учетом типов.
Механизм работы
Функция PHP array_search() поочередно сравнивает value со всеми значениями в массиве collection. По умолчанию, сравнение осуществляется без учета типов операндов. Эту настройку можно изменить, установив для флага strict значение TRUE. Сравнение строк осуществляется с учетом регистра.
При обнаружении совпадения возвращается ключ, соответствующий найденному элементу, и работа функции прекращается. Следовательно, с ее помощью нельзя обнаружить множественное вхождение искомого значения в массив.
Если совпадений не найдено, функция вернет булево значение FALSE.
Проверять возвращенный результат следует с помощью оператора строгого равенства (===). Это важно, так как функция может вернуть значение, которое приводится к FALSE, например, 0 или пустую строку.
Примеры использования
Пример 1. При передаче в функцию PHP array_search() многомерного массива, результатом работы будет ключ искомого элемента.
<?php
$array = array(
"season1" => "winter",
"season2" => "spring",
"season3" => "summer",
"season4" => "autumn"
);
$result1 = array_search("winter", $array);
$result2 = array_search("summer", $array);
$result3 = array_search("april", $array);
?>
В этом примере переменная $result1 получит значение "season1", $result2 будет равна "season3", а $result3 будет присвоено булево значение FALSE, так как строка "april" не встречается в исходном массиве.
Пример 2. Функция PHP array_search() может обрабатывать и одномерный массив, считая его ключи следующими по порядку числовыми индексами.
<?php
$array = array("каждый", "охотник", "желает", "знать", "где", "сидит", "фазан");
$result = array_search("охотник", $array);
?>
Переменной $result будет присвоено значение 1, согласно индексу элемента "охотник" в массиве $array.
Пример 3. Возможная ошибка при анализе результата.
<?php
$presidents = array(
0 => "Washington",
1 => "Adams",
2 => "Jefferson",
3 => "Madison",
4 => "Monroe"
);
$result = array_search("Washington", $presidents);
if (!$result) {
echo "G. Washington was not the first president of the USA";
}
?>
Вот так, не проверяя полученный результат строгим равенством, можно получить неожиданное сообщение о том, что Джордж Вашингтон не был первым президентом Соединенных Штатов.
Пример 4. Возвращается только ключ первого обнаруженного совпадения.
<?php
$song = ["jingle", "bells", "jingle", "bells", "jingle", "all", "the", "way];
$result = array_search("jingle", $song);
echo $result;
?>
Несмотря на то, что искомое значение встречается в массиве трижды, функция вернет только первый найденный результат - 0. Для поиска множественных совпадений рекомендуется использовать функцию PHP array_keys().