W3docs

Функция 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() наиболее полезна при работе с ассоциативными массивами, где ключи имеют имена, а не номера.

php— editable, runs on the server

Результат:

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 существующим.

Практика

Практика
Что делает функция array_key_exists() в PHP?
Что делает функция array_key_exists() в PHP?
Was this page helpful?