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;NULL
otherwise.
参见
array_key_first()
Gets the first key of an arrayend()
将数组的内部指针指向最后一个单元
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)); } } ?>