key()
(PHP 4, PHP 5, PHP 7)
从关联数组中取得键名
说明
key(array $array): mixed
key()返回数组中当前单元的键名。
参数
- $array
该数组。
返回值
key()函数返回数组中内部指针指向的当前单元的键名。但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,key()会返回NULL。
更新日志
| 版本 | 说明 |
|---|---|
| 7.0.0 | $array现在总是会传值。在此之前,它会尽可能传引用,否则就传值。 |
范例
Example #1key()例子
<?php
$array = array(
'fruit1' => 'apple',
'fruit2' => 'orange',
'fruit3' => 'grape',
'fruit4' => 'apple',
'fruit5' => 'apple');
// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array)) {
if ($fruit_name == 'apple') {
echo key($array).'<br />';
}
next($array);
}
?>
以上例程会输出:
fruit1<br /> fruit4<br /> fruit5<br />
参见
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
?>
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. ?>
(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);
}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); ?>
