LaravelConf Taiwan 2020 CFP Started

array_key_last

(PHP 7 >= 7.3.0)

array_key_lastGets the last key of an array

Descripción

array_key_last ( array $array ) : mixed

Get the last key of the given array without affecting the internal array pointer.

Parámetros

array

An array.

Valores devueltos

Returns the last key of array if the array is not empty; NULL otherwise.

Ver también

  • array_key_first() - Gets the first key of an array
  • end() - Establece el puntero interno de un array a su último elemento
add a note add a note

User Contributed Notes 10 notes

up
5
github / k-gun
11 months ago
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;
}
?>
up
24
Anyvie at devlibre dot fr
1 year ago
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];
    }
}
up
6
webmaster at redinfo dot co dot kr
7 months ago
// if : php ver < 7
// array_key_last

$arr = array('1'=>'bear1','2'=>array('22'=>'bear22'),'3'=>'bear3');
echo end(array_keys($arr));

// result : 3
up
3
contact at duzun dot me
10 months ago
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;
    }
}
?>
up
1
ccb_bc at hotmail dot com
11 months ago
<?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
?>
up
3
@manzoorwanijk
1 year ago
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;
    }
}
?>
up
-1
rnealxp at yahoo dot com
1 month ago
Now that we have this function, where we once used...
<?php
$idxLast
= count($arr) - 1;
?>
we can now optimize code speed by using...
<?php
$idxLast
= (array_key_last($arr) ?? 0);
?>
Use-cases include lots of looping and control-structures.
If you do not know ahead of time that the array is numerically indexed, and that it could possibly be associative...safer/faster to stick with count().
up
-1
williamdes at wdes dot fr
1 month ago
https://www.php.net/manual/fr/function.array-key-last.php#123950

did return the first key of my array only:
"array_keys($array)[count($array) - 1] ?? null" works

I hope the example is fine for everyone else.

My array is:
[
            new NameExpression('d', 0),
            new NameExpression('f', 0),
            new NameExpression('g', 0),
]
up
-1
rotexdegba007-github at yahoo dot ca
11 months ago
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));
        }
    }
up
-3
wes at nospam dot example dot org
1 year ago
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));
    }
}

?>
To Top