array_key_last

(PHP 7 >= 7.3.0, PHP 8)

array_key_last获取数组的最后一个键

说明

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

获取给定 array 的最后一个键,不会影响内部数组指针。

参数

array

一个数组。

返回值

如果数组不为空,则返回 array 的最后一个键;否则返回 null

参见

添加说明

用户贡献说明 12 条说明

github / k-gun
5 年前
对于喜欢测试糖果的人;

<?php
function array_key_last(array $array) {
// 100000 次迭代:约 0.068 秒
return key(array_slice($array, -1));
// 100000 次迭代:约 0.070 秒
return key(array_reverse($array));
// 100000 次迭代:约 0.088 秒
return array_keys($array)[count($array) - 1] ?? null;
}
?>
Anyvie at devlibre dot fr
6 年前
对于 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];
}
}
contact at duzun dot me
5 年前
尝试在性能方面超越这个填充函数!

<?php
if( !function_exists('array_key_last') ) {
function
array_key_last(array $array) {
if( !empty(
$array) ) return key(array_slice($array, -1, 1, true));
}
}

// 奖励
if (!function_exists('array_key_first')) {
function
array_key_first(array $arr) {
foreach(
$arr as $key => $unused) return $key;
}
}
?>
williamdes at wdes dot fr
4 年前
https://php.net/manual/fr/function.array-key-last.php#123950

只返回我数组的第一个键
"array_keys($array)[count($array) - 1] ?? null" 有效

我希望这个例子对其他所有人来说都很好。

我的数组是
[
new NameExpression('d', 0),
new NameExpression('f', 0),
new NameExpression('g', 0),
]
ccb_bc at hotmail dot com
5 年前
<?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
?>
webmaster at redinfo dot co dot kr
4 年前
// 如果:php 版本 < 7
// array_key_last

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

// 结果:3
dracveg at gmail dot com
3 年前
注意!

$a = array(
1 => 1,
0 => 0
);

echo (array_key_last($a)); // 输出:"0",而不是 "1"
@manzoorwanijk
5 年前
对于 PHP < 7.3.0

适用于任何类型的数组

<?php
if ( ! function_exists( 'array_key_last' ) ) {
/**
* array_key_last() 函数的填充函数,该函数是在 PHP 7.3 中添加的。
*
* 获取给定数组的最后一个键,不会影响
* 内部数组指针。
*
* @param array $array 一个数组
*
* @return mixed 如果数组不为空,则返回数组的最后一个键;否则返回 NULL。
*/
function array_key_last( $array ) {
$key = NULL;

if (
is_array( $array ) ) {

end( $array );
$key = key( $array );
}

return
$key;
}
}
?>
donaldinou at gmail dot com
3 年前
这是我的基准测试,以及

return key(array_slice($array, -1));

是我填充函数的最佳答案。

<?php

function 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;
}
rnealxp at yahoo dot com
4 年前
现在我们有了这个函数,以前我们使用的是...
<?php
$idxLast
= count($arr) - 1;
?>
现在我们可以通过使用以下方法优化代码速度...
<?php
$idxLast
= (array_key_last($arr) ?? 0);
?>
用例包括大量循环和控制结构。
如果您事先不知道数组是数字索引的,并且它可能是关联的...更安全/更快的是坚持使用 count()。
rotexdegba007-github at yahoo dot ca
5 年前
此 polyfill 适用于 PHP 5.6+。
它是对 "wes at nospam dot example dot org" 例子的略微修改

<?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));
}
}
wes at nospam dot example dot org
5 年前
正确的 polyfill(不会创建数组副本,并且不使用 IAP 的 polyfill)是

<?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