CascadiaPHP 2024

key

(PHP 4, PHP 5, PHP 7, PHP 8)

keyПолучает ключ массива

Описание

key(array|object $array): int|string|null

Функция key() возвращает индекс текущей позиции массива.

Список параметров

array

Массив.

Возвращаемые значения

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

Список изменений

Версия Описание
8.1.0 Вызов функции на объекте (object) объявлен устаревшим. Объект (object) либо сначала преобразовывают в массив (array) функцией get_mangled_object_vars(), либо пользуются методами класса, в котором реализовали интерфейс Iterator, например, ArrayIterator.
7.4.0 Экземпляры классов библиотеки SPL теперь обрабатываются как пустые объекты, у которых нет свойств, вместо вызова метода интерфейса Iterator с тем же именем, что и у этой функция.

Примеры

Пример #1 Пример использования функции key()

<?php

$array
= array(
'fruit1' => 'apple',
'fruit2' => 'orange',
'fruit3' => 'grape',
'fruit4' => 'apple',
'fruit5' => 'apple');

// Цикл выведет ключи ассоциативного массива,
// значения которых равны «apple»
while ($fruit_name = current($array)) {
if (
$fruit_name == 'apple') {
echo
key($array), "\n";
}
next($array);
}

?>

Результат выполнения приведённого примера:

fruit1
fruit4
fruit5

Смотрите также

  • current() - Возвращает текущий элемент массива
  • next() - Сдвигает внутренний указатель массива на одну позицию вперёд
  • array_key_first() - Получает первый ключ массива
  • foreach

add a note

User Contributed Notes 5 notes

up
414
lhardie
10 years ago
Note that using key($array) in a foreach loop may have unexpected results.

When requiring the key inside a foreach loop, you should use:
foreach($array as $key => $value)

I was incorrectly using:
<?php
foreach($array as $value)
{
$mykey = key($array);
}
?>

and experiencing errors (the pointer of the array is already moved to the next item, so instead of getting the key for $value, you will get the key to the next value in the array)

CORRECT:
<?php
foreach($array as $key => $value)
{
$mykey = $key;
}

A noob error, but felt it might help someone else out there.
up
54
vinob44 at gmail dot com
10 years ago
Suppose if the array values are in numbers and numbers contains `0` then the loop will be terminated. To overcome this you can user like this

<?php
$array
= array(
'0' => '5',
'1' => '2',
'2' => '0',
'3' => '3',
'4' => '1');

// wrong approach

while ($fruit_name = current($array)) {

echo
key($array).'<br />';
next($array);
}

// the way will be break loop when arra('2'=>0) because its value is '0', while(0) will terminate the loop

// correct approach
while ( ($fruit_name = current($array)) !== FALSE ) {

echo
key($array).'<br />';
next($array);
}
//this will work properly
?>
up
21
FatBat
12 years ago
Needed to get the index of the max/highest value in an assoc array.
max() only returned the value, no index, so I did this instead.

<?php
reset
($x); // optional.
arsort($x);
$key_of_max = key($x); // returns the index.
?>
up
-11
Md Tahazzot
4 years ago
(Editor note: Or just use the array_keys function)

Make as simple as possible but not simpler like this one :)

$k = array();
for($i = 0; $i < count($arr); $i++){
$k[$i] = key($arr);
next($arr);
}
up
-18
danielmadsv at gmail dot com
5 years ago
In addition to FatBat's response, if you'd like to find out the highest key in an array (assoc or not) but don't want to arsort() it, take a look at this:

<?php

$arr
= [ '3' => 14, '1' => 15, '4' => 92, '15' => 65 ];

$key_of_max = array_search( max($arr) , $arr);

?>
To Top