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); ?>