(PHP 4, PHP 5, PHP 7, PHP 8)
key — Получает ключ текущего элемента массива
Функция key() возвращает ключ элемента, который соответствует текущей позиции внутреннего указателя массива.
arrayМассив.
Функция key() только возвращает ключ
элемента, на который в текущий момент указывает
внутренний указатель массива, и не сдвигает указатель ни в каком
направлении. Функция key() вернёт null ,
если внутренний указатель сдвинулся за пределы списка элементов
или при вызове на пустом массиве.
| Версия | Описание |
|---|---|
| 8.1.0 | Вызов функции на значении с типом object устарел. Объект (object ) либо сначала преобразовывают в массив (array ) функцией get_mangled_object_vars() , либо пользуются методами класса наподобие ArrayIterator , в котором реализовали интерфейс Iterator . |
| 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
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.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
?>