PHP Conference Japan 2024

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

參見

  • array_key_first() - 取得陣列的第一個鍵值
  • end() - 將陣列的內部指標設定為最後一個元素
新增筆記

使用者貢獻的筆記 12 筆筆記

40
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;
}
?>
52
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];
}
}
11
contact at duzun dot me
5 年前
試試看在效能方面擊敗這個 polyfill!

<?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;
}
}
?>
3
williamdes at wdes dot fr
4 年前
https://php.dev.org.tw/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),
]
5
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
?>
6
webmaster at redinfo dot co dot kr
5 年前
// if : php 版本 < 7
// array_key_last

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

// 結果:3
5
@manzoorwanijk
6 年前
適用於 PHP < 7.3.0

適用於任何型別的陣列

<?php
if ( ! function_exists( 'array_key_last' ) ) {
/**
* PHP 7.3 中新增的 array_key_last() 函式的 Polyfill。
*
* 取得給定陣列的最後一個鍵,而不影響
* 內部陣列指標。
*
* @param array $array 一個陣列
*
* @return mixed 如果陣列不是空的,則傳回陣列的最後一個鍵;否則傳回 NULL。
*/
function array_key_last( $array ) {
$key = NULL;

if (
is_array( $array ) ) {

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

return
$key;
}
}
?>
1
dracveg at gmail dot com
3 年前
請注意!

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

echo (array_key_last($a)); // 輸出:"0",而不是 "1"
0
donaldinou at gmail dot com
4 年前
這是我的基準測試,而且

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

是我對 polyfill 的最佳解答。

<?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;
}
0
rnealxp at yahoo dot com
4 年前
現在我們有了這個函式,以前我們使用...
<?php
$idxLast
= count($arr) - 1;
?>
現在我們可以使用...來優化程式碼速度
<?php
$idxLast
= (array_key_last($arr) ?? 0);
?>
使用案例包括大量的迴圈和控制結構。
如果你事先不知道陣列是否為數字索引,而且它可能為關聯式陣列...使用 count() 會更安全/更快速。
0
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; }

// array_slice 的最後 2 個參數至關重要
return array_key_first(array_slice($array, -1, null, true));
}
}
-2
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