Key exists: примеры (PHP)

Проверка наличия ключа в массиве PHP с key_exists
Раздел: Работа с массивами
key_exists(string|int $key, array $array): bool

Функция key_exists в PHP

Назначение

Функция key_exists() является псевдонимом array_key_exists() в языке программирования PHP. Ее основная задача – проверка существования указанного ключа или индекса в массиве. Функция возвращает булево значение, что делает ее полезной для условных операторов при работе с данными, хранящимися в ассоциативных или числовых массивах.

Аргументы функции

Функция принимает два обязательных параметра:

  • $key (mixed) – Ключ или индекс, наличие которого проверяется в массиве.
  • $array (array) – Массив, в котором осуществляется поиск ключа.

Функция возвращает true, если ключ существует, и false в противном случае.

Примеры использования key_exists

Проверка строкового ключа
<?php
$array = ['name' => 'Иван', 'age' => 30];
$result = key_exists('name', $array);
var_dump($result);
?>
bool(true)
Проверка целочисленного индекса
<?php
$array = [10 => 'a', 20 => 'b'];
$result = key_exists(20, $array);
var_dump($result);
?>
bool(true)
Проверка отсутствующего ключа
<?php
$array = ['a' => 1, 'b' => 2];
$result = key_exists('c', $array);
var_dump($result);
?>
bool(false)

Похожие функции в PHP

isset()

Функция isset() проверяет, установлена ли переменная (или элемент массива) и не равна ли она null. Для проверки ключей массива isset() возвращает false, если ключ не существует или его значение равно null. key_exists() возвращает true даже для ключей со значением null.

Функция array_key_exists() является полным синонимом key_exists() и ведет себя идентично. Выбор между ними зависит от стиля кодирования.

Функция in_array() проверяет наличие значения в массиве, а не ключа. Она используется для других сценариев поиска данных.

Типичные ошибки

Передача не массива вторым аргументом

Если второй аргумент не является массивом, функция вернет false и вызовет предупреждение.

<?php
$result = key_exists('key', 'not an array');
var_dump($result);
?>
Warning: key_exists() expects parameter 2 to be array, string given
bool(false)
Сравнение с isset() для ключей со значением null

Различие в поведении key_exists() и isset() может привести к неожиданным результатам.

<?php
$array = ['key' => null];
var_dump(key_exists('key', $array));
var_dump(isset($array['key']));
?>
bool(true)
bool(false)

История изменений

Функция key_exists() была добавлена в PHP как псевдоним array_key_exists(). Начиная с PHP 8.0.0, функция не претерпела существенных изменений в поведении. Важно отметить, что в PHP 8 улучшена обработка типов, и передача неверного типа аргумента теперь вызывает TypeError, если включена строгая типизация.

Расширенные примеры

Проверка нескольких ключей

Функция может использоваться в цикле для проверки набора необходимых ключей.

Пример php
<?php
$userData = ['first_name' => 'Анна', 'email' => 'anna@example.com'];
$requiredKeys = ['first_name', 'last_name', 'email'];

foreach ($requiredKeys as $key) {
    if (!key_exists($key, $userData)) {
        echo "Отсутствует ключ: $key<br>";
    }
}
?>
Отсутствует ключ: last_name
Работа с числовыми индексами после операций с массивом
Пример php
<?php
$array = [];
$array[] = 'первый элемент';
unset($array[0]);
$result = key_exists(0, $array);
var_dump($result);

$array = array_values($array);
$result = key_exists(0, $array);
var_dump($result);
?>
bool(false)
bool(true)
Использование с объектами, реализующими ArrayAccess

key_exists() работает только с массивами. Для объектов, реализующих интерфейс ArrayAccess, функция вернет false.

Пример php
<?php
class Test implements ArrayAccess {
    public function offsetExists($offset): bool { return true; }
    public function offsetGet($offset): mixed { return null; }
    public function offsetSet($offset, $value): void {}
    public function offsetUnset($offset): void {}
}

$obj = new Test();
$result = key_exists('any', $obj);
var_dump($result);
?>
Warning: key_exists() expects parameter 2 to be array, object given
bool(false)

Аналоги функции в других языках

Key exists в Python

В Python для проверки ключа в словаре используется оператор in.

dictionary = {'name': 'Иван', 'age': 30}
result = 'name' in dictionary
print(result)
True

Key exists в Javascript

В JavaScript для объектов можно использовать метод hasOwnProperty() или оператор in.

const obj = { name: 'Иван', age: 30 };
let result = obj.hasOwnProperty('name');
console.log(result);

result = 'age' in obj;
console.log(result);
true
true

Key exists в MySQL

В MySQL прямой аналогии нет, но для проверки существования записи по ключу используется оператор EXISTS в подзапросе.

SELECT EXISTS(SELECT 1 FROM users WHERE id = 1) as key_exists;

PHP key_exists function comments

En
Key exists Alias of array_key_exists