• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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 />
    

    参见

    • current() 返回数组中的当前单元
    • next() 将数组中的内部指针向前移动一位
    • foreach
    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);
    ?>
    

    上篇:key_exists()

    下篇:krsort()