Функция PHP "array_key_exists" — подробное объяснение
Функция PHP array_key_exists проверяет наличие ключа в массиве и возвращает boolean-значение. Узнайте отличие от isset().
array_key_exists() — встроенная функция PHP, которая проверяет, существует ли заданный ключ в массиве. Она возвращает true, если ключ присутствует, и false, если нет — независимо от того, какое значение хранится под этим ключом. На этой странице объясняется, как работает функция, чем она отличается от isset() (наиболее распространённый источник ошибок) и в каких случаях следует использовать каждую из них.
Синтаксис
array_key_exists(string|int $key, array $array): bool$key— ключ для поиска. Ключи массива в PHP всегда являются целыми числами или строками, поэтому$keyдолжен быть одного из этих типов.$array— массив для поиска.- Возвращаемое значение —
true, если$keyявляется ключом$array, иначеfalse.
Обратите внимание, что проверяется ключ, а не значение. Для поиска по значению используйте in_array() или array_search().
Базовый пример
array_key_exists() наиболее полезна при работе с ассоциативными массивами, где ключи имеют имена, а не номера.
Результат:
The key 'first_name' exists in the array.Функция также работает с целочисленными ключами — включая автоматические числовые индексы обычного списка:
<?php
$colors = ['red', 'green', 'blue']; // keys are 0, 1, 2
var_dump(array_key_exists(2, $colors)); // bool(true)
var_dump(array_key_exists(3, $colors)); // bool(false)Результат:
bool(true)
bool(false)array_key_exists() vs. isset()
Это наиболее важное, что нужно понять о данной функции. Обе могут проверять наличие ключа, но отвечают на разные вопросы:
array_key_exists($key, $array)возвращаетtrue, если ключ определён даже тогда, когда его значение равноnull.isset($array[$key])возвращаетfalse, когда значение равноnull, посколькуisset()проверяет, что переменная существует и не является null.
<?php
$data = ['name' => null];
var_dump(array_key_exists('name', $data)); // bool(true) — the key is there
var_dump(isset($data['name'])); // bool(false) — value is nullРезультат:
bool(true)
bool(false)Используйте array_key_exists(), когда значение null имеет смысл (например, «поле было отправлено, но оставлено пустым»). Используйте isset(), когда вас интересует только наличие непустого, ненулевого значения — к тому же это немного быстрее для типичного случая.
Когда использовать
- Защита от предупреждений «undefined array key» перед чтением ключа, который может отсутствовать.
- Проверка наличия обязательных ключей в конфигурации или данных формы.
- Различение ключа со значением
nullи ключа, которого действительно нет.
Типичные ошибки
- Функция чувствительна к регистру для строковых ключей.
'Name'и'name'— это разные ключи. - Она не выполняет поиск во вложенных массивах. Проверяется только верхний уровень переданного массива.
- Она не работает с значениями. Поиск
'John'в качестве ключа в['first_name' => 'John']вернётfalse. Для поиска по значению используйтеin_array(). - Чтобы получить все ключи сразу, используйте
array_keys().
Заключение
array_key_exists() — небольшой, но незаменимый инструмент для безопасной работы с массивами PHP. Используйте её, когда нужно проверить, определён ли ключ — и помните, что в отличие от isset(), она считает ключ с значением null существующим.