Проверить наличие элемента в массиве

Проверить наличие элемента в массиве можно через функцию in_array(), которая возвращает «true» или «false».

$array = ['PHP', 'MySQL'];

if (in_array('PHP', $array)) {
    echo 'Элемент «PHP» найден';
}

Вернуть позицию (ключ) массива

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

$array = [
    90234 => 'PHP',
    90421 => 'MySQL'
];

$lang_id = array_keys($array, 'PHP'); // array(90234)

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

$array = [
    90234 => 'PHP',
    90421 => 'MySQL',
    91423 => 'PHP'
];

$lang_id = array_search('PHP', $array); // 90234

Число «0» в in_array()

Некорректная работа in_array(), если в массиве есть число «0» была исправлена в PHP 8.0. Текст ниже актуален для сайтов, которые используют PHP 7.4 и ниже.

Если будет идти поиск числа «0», то функция in_array() всегда будет возвращать «true» (т.е. элемент найден).

// пример in_array(), когда в массиве есть «0»
$array = ['PHP', 'MySQL', 0];

in_array('PHP', $array); // Элемент найден
in_array('Python', $array); // Элемент найден
in_array('Ruby', $array); // Элемент найден

Функция in_array() проверяет каждый элемент массива, сравнивая их с переданным параметром. На каждом шаге параметр преобразуется в тип данных текущего элемента массива. И когда она дойдёт до «0», строка преобразуется в число и будет равняться «0», а число «0» есть в массиве. Поэтому если в массиве есть число ноль и идёт поиск строки, то in_array() всегда будет возвращать «true».

В этой ситуации для функции in_array() рекомендуется добавлять третий параметр true, который будет также проверять тип данных.

$array = ['PHP', 'MySQL', 0];

// с параметром «true»
in_array('PHP', $array, true); // Элемент найден
in_array('Ruby', $array, true); // Элемент не найден
in_array('0', $array, true); // Элемент не найден
in_array(0, $array, true); // Элемент найден