array_key_last

(PHP 7 >= 7.3.0, PHP 8)

array_key_lastGets the last key of an array

Description

array_key_last(array $array): int|string|null

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

Parameters

array

An array.

Return Values

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

See Also

  • array_key_first() - Gets the first key of an array
  • end() - Set the internal pointer of an array to its last element
add a note

User Contributed Notes 12 notes

up
53
Anyvie at devlibre dot fr
7 years 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
38
github / k-gun
6 years ago
For those who loves tested candies;<?phpfunction 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
10
contact at duzun dot me
6 years ago
Try to beat this polyfill in terms of performance!<?phpif( !function_exists('array_key_last') ) {    function array_key_last(array $array) {        if( !empty($array) ) return key(array_slice($array, -1, 1, true));    }}// Bonusif (!function_exists('array_key_first')) {    function array_key_first(array $arr) {        foreach($arr as $key => $unused) return $key;    }}?>
up
3
williamdes at wdes dot fr
5 years ago
https://www.php.net/manual/fr/function.array-key-last.php#123950did return the first key of my array only:"array_keys($array)[count($array) - 1] ?? null" worksI hope the example is fine for everyone else.My array is:[            new NameExpression('d', 0),            new NameExpression('f', 0),            new NameExpression('g', 0),]
up
5
ccb_bc at hotmail dot com
6 years 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
6
webmaster at redinfo dot co dot kr
5 years 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
2
dracveg at gmail dot com
4 years ago
Notice!$a = array(    1 => 1,    0 => 0);echo (array_key_last($a)); // output: "0", not "1"
up
5
@manzoorwanijk
6 years ago
For PHP < 7.3.0 :Will work for any type of array<?phpif ( ! 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
0
rnealxp at yahoo dot com
5 years 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
0
rotexdegba007-github at yahoo dot ca
6 years 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
-1
donaldinou at gmail dot com
4 years ago
Here come my benchmark, and return key(array_slice($array, -1));is the my best answer for a polyfill.<?phpfunction array_key_last_1(array $array) {    // assert(!empty($array));    return key(array_slice($array, -1));}function array_key_last_2(array $array) {    return key(array_slice($array, -1, 1, true));}function array_key_last_3(array $array) {    return key(array_reverse($array));}function array_key_last_4(array $array) {    return array_keys($array)[count($array) - 1] ?? null;}function array_key_last_5(array $array) {    return array_keys($array)[count($array) - 1] ?? null;}function array_key_last_6(array $array) {    $copy = array_keys($array);    return end($copy);}$result = array();$array = range(0, 1000000);for($i=1; $i < 7;$i++) {  $callback = 'array_key_last_' . $i;  $before = microtime(true);  call_user_func_array($callback, array($array));  $after = microtime(true);  $time = ($after-$before);  $result[$callback] = $time;}asort($result);foreach ($result as $key => $value) {    echo '[' . $key . ']' . $value . " sec" . PHP_EOL;}
up
-3
wes at nospam dot example dot org
6 years ago
Correct polyfill (one that doesn't make copies of arrays, and that doesn't make use of the IAP) is:<?phpif(!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