Задача
Необходимо узнать, присутствует ли элемент в массиве, и если да, то в какой позиции он находится.
Решение
Используйте функцию array_search(). Она возвращает ключ обнаруженного элемента или значение false:
$position = array_search($array, $value);
if ($position !== false) {
//элемент массива $array в позиции $position имеет значение $value
}
Обсуждение
Используйте функцию in_array() для установления наличия в массиве определенного значения; используйте функцию array_search() для определения местоположения этого значения. Однако поскольку функция array_search() довольно изящно обрабатывает ситуации, когда значение не найдено, то вместо функции in_array() лучше использовать функцию array_search(). Разница в скорости работы незначительная, а дополнительная информация может оказаться полезной:
$favorite_foods = array(1 => 'artichokes', 'bread', 'cauliflower',
'deviled eggs');
$food = 'cauliflower';
$position = array_search($food, $favorite_foods);
if ($position !== false) {
echo "My #$position favorite food is $food";
} else {echo "Blech! I hate $food!";
}
Используйте оператор !== для сравнения со значением false, поскольку если обнаруженная строка находится на нулевой позиции, то оператор if преобразует его в логическое значение false, что явно не то, что ожидалось.
Если значение встречается в массиве несколько раз, то единственное, что гарантирует функция array_search(), – это возвращение одного значения, но не обязательно первого по порядку.