Key exists: примеры (PHP)
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() проверяет, установлена ли переменная (или элемент массива) и не равна ли она 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)
Различие в поведении 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
$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
$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)
key_exists() работает только с массивами. Для объектов, реализующих интерфейс ArrayAccess, функция вернет false.
<?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;