Перейти к содержимому

Как проверить наличие элемента в массиве php

  • автор:

Проверка существования значения — PHP: Массивы

В работе с массивами есть одна распространенная ошибка — выход за границу массива. Она происходит, когда мы пытаемся извлечь элемент массива по несуществующему индексу:

 $animals = ['cats', 'dogs', 'birds']; $animals[5]; // null 

Разные языки реагируют на выход за границу совершенно по-разному:

  • В Python возникает ошибка
  • В JavaScript возвращается undefined
  • В языке С код возвращает случайные данные из соседнего блока памяти, что может привести к катастрофе

Выход за границу в PHP

В PHP свой путь. С одной стороны такой вызов вернет null . С другой стороны, код выдаст Warning с примерно таким сообщением: Warning: Undefined array key 5. В общем случае, стоит всегда проверять доступность индекса и никогда не обращаться к массиву за его границами. Это безопасная стратегия, можете использовать ее в разных языках. Так вам будет проще адаптироваться к ним.

Проверять наличие индекса в массиве можно с помощью функции array_key_exists . Первым параметром она принимает индекс, а вторым — массив для поиска:

 $ages = [3, 2]; if (array_key_exists(3, $ages))  print_r('yeah!'); > else  print_r('no'); > // => no 

Вместо array_key_exists() иногда используют функцию isset() . Она имеет ровно одно отличие в поведении. Если значение по индексу существует, но его значение равно null , то эти операции приведут к разному результату:

  • isset() вернет false
  • array_key_exists() вернет true

Операция isset() похожа на проверку наличия значения по индексу, но все же у нее другой смысл. Поэтому в большинстве случаев стоит выбирать array_key_exists() , потому что она больше подходит по смыслу:

 $ages = [3, 2]; // Операция isset принимает на вход массив, потому что он используется с подставленным индексом if (isset($ages[3]))  print_r('yeah!'); > else  print_r('no'); > // => no 

Оператор объединения с null

Начиная с седьмой версии, в PHP появился специальный оператор ?? — он используется в качестве синтаксического сахара к isset() . Он позволяет упростить проверку на существование в тех случаях, когда нам нужно значение по умолчанию:

 $age = $ages[3] ?? 5; // Значение по умолчанию равно 5 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

array_key_exists

Функция array_key_exists() возвращает true , если в массиве присутствует указанный ключ key . Параметр key может быть любым значением, которое подходит для индекса массива.

Список параметров

Массив с проверяемыми ключами.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Замечание:

array_key_exists() ищет ключи только на первом уровне массива. Внутренние ключи в многомерных массивах найдены не будут.

Примеры

Пример #1 Пример использования array_key_exists()

$search_array = array( ‘first’ => 1 , ‘second’ => 4 );
if ( array_key_exists ( ‘first’ , $search_array )) echo «Массив содержит элемент ‘first’.» ;
>
?>

Пример #2 array_key_exists() и isset()

isset() не возвращает true для ключей массива, указывающих на null , а array_key_exists() возвращает.

$search_array = array( ‘first’ => null , ‘second’ => 4 );

// возвращает false
isset( $search_array [ ‘first’ ]);

// возвращает true
array_key_exists ( ‘first’ , $search_array );
?>

Примечания

Замечание:

По причинам обратной совместимости, array_key_exists() возвращает true , если key является свойством объекта ( object ), переданным в качестве параметра array . Поведение устарело в PHP 7.4.0 и удалено в PHP 8.0.0.

Чтобы проверить, содержит ли объект какое-либо свойство, используйте функцию property_exists() .

Смотрите также

  • isset() — Определяет, была ли установлена переменная значением, отличным от null
  • array_keys() — Возвращает все или некоторое подмножество ключей массива
  • in_array() — Проверяет, присутствует ли в массиве значение
  • property_exists() — Проверяет, содержит ли объект или класс указанный атрибут

Функция in_array

Функция in_array проверяет наличие заданного элемента в массиве. Первым параметром она принимает что искать, а вторым — в каком массиве.

Синтаксис

in_array(что искать, в каком массиве);

Пример

Давайте проверим, есть ли в массиве $arr элемент со значением 3 :

Результат выполнения кода:

Смотрите также

  • функцию array_key_exists ,
    которая проверяет наличие указанного ключа в массиве

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

Проверить наличие элемента в массиве можно через функцию 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()

Если будет идти поиск числа «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); // Элемент найден 

Обновлено: 01 ноября 2020

Комментарии

Авторизуйтесь, чтобы добавлять комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *