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

Полное руководство по функции key() в PHP с примерами
Раздел: Работа с массивами
key(array|object $array): int|string|null

Функция key в PHP

Описание и применение

Функция key() возвращает ключ текущего элемента массива. Внутренний указатель массива при этом не перемещается. Часто используется в сочетании с функциями current(), next(), prev() и reset() для итерации по массиву.

Синтаксис
key(array|object $array): int|string|null

Единственный параметр $array - массив или объект, из которого требуется получить ключ текущего элемента.

Функция возвращает ключ текущего элемента массива. Если внутренний указатель находится за пределами массива или массив пуст, возвращается null.

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

Базовый пример
$array = ['first' => 1, 'second' => 2, 'third' => 3];
echo key($array);
first
С перемещением указателя
$array = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
echo key($array) . "\n";
next($array);
echo key($array) . "\n";
end($array);
echo key($array);
a
b
c
Пустой массив
$array = [];
var_dump(key($array));
NULL

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

current()

Возвращает текущий элемент массива без перемещения указателя.

each() (устаревшая)

Возвращает пару ключ/значение и перемещает указатель. В PHP 7.2+ рекомендуется использовать foreach.

Сбрасывает указатель массива на первый элемент и возвращает его значение.

next() / prev()

Перемещает указатель массива вперед или назад и возвращает следующий/предыдущий элемент.

Выбор функции

key() используют когда нужен только ключ текущего элемента. Для полной итерации предпочтительнее конструкция foreach. Функции семейства reset/next/prev применяют при ручном управлении указателем.

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

Использование с неинициализированной переменной
var_dump(key($undefined));
Warning: key() expects parameter 1 to be array, null given
Использование с не-массивом
$var = 'string';
echo key($var);
Warning: key() expects parameter 1 to be array, string given
Изменение массива во время итерации
$array = ['a' => 1, 'b' => 2];
while (key($array) !== null) {
    unset($array['a']);
    next($array);
}
Возможны непредсказуемые результаты, зависящие от версии PHP

Изменения в PHP 8

Строгая типизация

В PHP 8 функция вызывает TypeError при передаче аргумента неправильного типа. Ранее выдавались предупреждения.

key('string');
TypeError: key(): Argument #1 ($array) must be of type array, string given
Объекты без итератора

В PHP 8.1 функция принимает объекты, реализующие интерфейс Traversable. Работа с такими объектами аналогична массивам.

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

Итерация с сохранением указателя
Пример php
$array = ['k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3'];
$saved_key = key($array);
next($array);
reset($array);
while (key($array) !== $saved_key) {
    next($array);
}
echo 'Восстановленный ключ: ' . key($array);
Восстановленный ключ: k1
Работа с multidimensional arrays
Пример php
$multi = ['level1' => ['a' => 1, 'b' => 2], 'level2' => ['c' => 3]];
reset($multi);
while ($level1_key = key($multi)) {
    echo "Уровень 1: $level1_key\n";
    $subarray = current($multi);
    reset($subarray);
    while ($level2_key = key($subarray)) {
        echo "  Уровень 2: $level2_key\n";
        next($subarray);
    }
    next($multi);
}
Уровень 1: level1
  Уровень 2: a
  Уровень 2: b
Уровень 1: level2
  Уровень 2: c
Сравнение с end()
Пример php
$data = [10 => 'десять', 20 => 'двадцать'];
end($data);
echo 'Ключ последнего элемента: ' . key($data);
Ключ последнего элемента: 20
Использование с list() и each() (устаревший способ)
Пример php
$arr = ['color' => 'красный', 'fruit' => 'яблоко'];
reset($arr);
list($key, $val) = each($arr);
echo "$key => $val";
color => красный

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

Key в Python

# Использование enumerate()
arr = {'a': 1, 'b': 2}
for key in arr:
    print(key)

# Получение ключей через dict.keys()
keys = list(arr.keys())
print(keys[0])
a
b
a

Key в Javascript

// Object.keys()
const obj = {x: 10, y: 20};
const keys = Object.keys(obj);
console.log(keys[0]);

// for...in для итерации
for (let key in obj) {
    console.log(key);
    break;
}
x
x

Key в MySQL

В SQL нет прямой аналогии, но при выборке с ORDER BY первая запись может считаться "текущей".

SELECT * FROM table ORDER BY id LIMIT 1;

PHP key function comments

En
Key Fetch a key from an array