key

(PHP 4, PHP 5, PHP 7)

key从关联数组中取得键名

说明

mixed key ( array $array )

key() 返回数组中当前单元的键名。

参数

array

该数组。

返回值

key() 函数返回数组中内部指针指向的当前单元的键名。 但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,key() 会返回 NULL

更新日志

版本 说明
7.0.0 array 现在总是会传值。 在此之前,它会尽可能传引用,否则就传值。

范例

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 />

参见

User Contributed Notes

tigran dot ghabuzyan at gmail dot com 17-Jun-2017 01:50
Why is the argument passed as reference, if the function does not change anything on it.
vincphil54800 at gmail dot com 29-Sep-2016 07:13
If you want to return the key on an associative array to get the first occurence of this array for exemple and if you don't know the key of the element that you search, it's impossible to find it without create you're own fonction, you can use for example :

/**
     * Retourne la premiére clé/valeur d'un tableau (notament utile pour les tableaux associatifs)
     * @param array $tab un tableau
     * @param int $mode 0 => renvoie la premiére valeur du tableau, 1=> renvoie la premiére clé du tableau
     * @return mixed la premiére occurence d'un tableau
     */
    public static function firstKey($tab,$mode = 0)
    {
        foreach($tab as $key=>$values)
        {
            if(is_array($values))
            {
                self::firstKey($values);
            }
            if($mode == 0)
            {
                return $values;
            }
            elseif($mode == 1)
            {
                return $key;           
            }
        }
        return null;
    }
lhardie 24-Apr-2014 01:05
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.
vinob44 at gmail dot com 23-Oct-2013 08:43
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
?>
FatBat 17-Oct-2011 09:20
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.
?>