©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5, PHP 7)
key — 从关联数组中取得键名
&$array
)key() 返回数组中当前单元的键名。
array
该数组。
key() 函数返回数组中内部指针指向的当前单元的键名。
但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的, key() 会返回 NULL
。
Example #1 key() 例子
<?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 />
[#1] Anonymous [2014-11-26 21:14:16]
<?php
function generarCodigo($longitud) {
$key = '';
$pattern = '123456789ASKKDOQEMANDOASJDSO';
$max = strlen($pattern)-1;
for($i=0;$i < $longitud;$i++) $key .= $pattern{mt_rand(0,$max)};
return $key;
}
echo generarCodigo(4)
echo "-";
echo generarCodigo(4);
echo "-";
echo generarCodigo(4);
echo "-";
echo generarCodigo(4);
?>
[#2] art [2014-10-08 08:50:45]
Returns "Warning" message if given parameter is not an array.
[#3] lhardie [2014-04-23 16:05:14]
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.
[#4] vinob44 at gmail dot com [2013-10-23 11:43:31]
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
?>
[#5] goker.cebeci [2012-02-23 19:41:04]
object usage:
<?php
$object = new stdClass();
$object->child->key = 'value';
echo key((array) $object->child);
// key
?>
[#6] FatBat [2011-10-17 12:20:49]
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.
?>
[#7] michael [2008-12-09 11:19:37]
Here is an improved version of the KeyName function below. It is simpler and faster, especially on large arrays as it runs in O(1) instead of O(n).
<?php
function KeyName(array $a, $pos) {
$temp = array_slice($a, $pos, 1, true);
return key($temp);
}
?>
Also, KeyName($a, -1) will return the last key, etc.
[#8] yarco dot w at gmail dot com [2007-09-13 01:45:42]
Re: br_joris[at]hotmail[doth]com
Do you really mean you want 2 keys point to 1 value?
What you've written seems you want 1 key point to 2 values.
But if you really want 2 keys point to 1 value, you could do the following:
<?php
$buf['key1'] = 'abc';
$buf['key2'] = & $buf['key1'];
?>