• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • array_key_last()

    (PHP 7 >= 7.3.0)

    Gets the last key of an array

    说明

    array_key_last(array $array): mixed

    Get the last key of the given$arraywithout affecting the internal array pointer.

    参数

    $array

    An array.

    返回值

    Returns the last key of$arrayif the array is not empty;NULLotherwise.

    参见

    For PHP <= 7.3.0 :
    if (! function_exists("array_key_last")) {
      function array_key_last($array) {
        if (!is_array($array) || empty($array)) {
          return NULL;
        }
        
        return array_keys($array)[count($array)-1];
      }
    }
    // if : php ver < 7 
    // array_key_last 
    $arr = array('1'=>'bear1','2'=>array('22'=>'bear22'),'3'=>'bear3');
    echo end(array_keys($arr));
    // result : 3
    For PHP < 7.3.0 :
    Will work for any type of array
    <?php
    if ( ! function_exists( 'array_key_last' ) ) {
      /**
       * Polyfill for array_key_last() function added in PHP 7.3.
       *
       * Get the last key of the given array without affecting
       * the internal array pointer.
       *
       * @param array $array An array
       *
       * @return mixed The last key of array if the array is not empty; NULL otherwise.
       */
      function array_key_last( $array ) {
        $key = NULL;
        if ( is_array( $array ) ) {
          end( $array );
          $key = key( $array );
        }
        return $key;
      }
    }
    ?>
    
    <?php 
      // PHP >= 7
      function _array_key_last(array $array){
        return (!empty($array)) ? array_keys($array)[count($array)-1] : null;
      }
      var_dump(_array_key_last(['PHP', 'Javascript', 'Python'])); // 2
     ?>
    
    Try to beat this polyfill in terms of performance!
    <?php
    if( !function_exists('array_key_last') ) {
      function array_key_last(array $array) {
        if( !empty($array) ) return key(array_slice($array, -1, 1, true));
      }
    }
    // Bonus
    if (!function_exists('array_key_first')) {
      function array_key_first(array $arr) {
        foreach($arr as $key => $unused) return $key;
      }
    }
    ?>
    
    For those who loves tested candies;
    <?php
    function array_key_last(array $array) {
      // 100000 iters: ~0.068 secs
      return key(array_slice($array, -1));
      // 100000 iters: ~0.070 secs
      return key(array_reverse($array));
      // 100000 iters: ~0.088 secs
      return array_keys($array)[count($array) - 1] ?? null;
    }
    ?>
    
    This polyfill works for PHP 5.6+. 
    It is a slight modification of "wes at nospam dot example dot org"'s example:
    <?php
      if( !function_exists('array_key_first') ) {
        function array_key_first(array $array) {
          if( $array === [] ) { return NULL; }
          foreach($array as $key => $_) { return $key; }
        }
      }
      if( !function_exists('array_key_last') ) {
        function array_key_last(array $array) {
          if( $array === [] ) { return null; }
           
          // the last 2 args to array_slice are crucial
          return array_key_first(array_slice($array, -1, null, true));
        }
      }
    Correct polyfill (one that doesn't make copies of arrays, and that doesn't make use of the IAP) is:
    <?php
    if(!function_exists('array_key_first')){
      function array_key_first(array $array){
        if($array === []){
          return NULL;
        }
        foreach($array as $key => $_) return $key;
      }
    }
    if(!function_exists('array_key_last')){
      function array_key_last(array $array){
        if($array === []){
          return NULL;
        }
        return array_key_first(array_slice($array, -1));
      }
    }
    ?>
    

    上篇:array_key_first()

    下篇:array_keys()