14个解决方案
556 votes
解决方案是使用reset()和reset()(引用)的组合:
reset()将数组的内部指针前进到最后一个元素,并返回其值。
reset()返回当前数组位置的索引元素。
因此,像这样的代码的一部分应该做的伎俩:
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
end($array); // move the internal pointer to the end of the array
$key = key($array); // fetches the key of the element pointed to by the internal pointer
var_dump($key);
将输出:
string 'last' (length=4)
即我的数组的最后一个元素的键。
完成此操作后,数组的内部指针将位于数组的末尾。 正如评论中指出的那样,您可能希望在数组上运行reset()以将指针返回到数组的开头。
Pascal MARTIN answered 2019-02-04T09:33:54Z
63 votes
虽然array_slice()似乎是最简单的,但它并不是最快的。
更快,更强大的替代方案是array_slice()
编辑罢工:这一说法尚未得到证实 评论中提到了相反的证据。 如果有的话 对于这张海报关于速度/效率的断言然后a 必须提供基准测试。
$last_key = key( array_slice( $array, -1, 1, TRUE ) );
Tadej Magajna answered 2019-02-04T09:34:29Z
48 votes
我更喜欢
end(array_keys($myarr))
Rutger van Baren answered 2019-02-04T09:34:51Z
29 votes
请使用:echo $array[count($array) - 1];
Aditya Choudhary answered 2019-02-04T09:35:12Z
19 votes
不知道这是否会更快或更快,但这样做似乎更容易,并且通过不将函数传递给end()来避免错误...
它只需要一个变量......编写一行代码并不是什么大不了的事,如果你需要,可以取消它。
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
Ryan Hungate answered 2019-02-04T09:35:41Z
14 votes
自PHP 7.3(2018)以来,(最终)有这样的功能:[http://php.net/manual/en/function.array-key-last.php]
$array = ['apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )
将输出
orange
Patryk Godowski answered 2019-02-04T09:36:05Z
8 votes
尝试使用array_pop和array_keys函数,如下所示:
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
codaddict answered 2019-02-04T09:36:26Z
3 votes
我还想为这个问题提供另一种解决方案。
假设您的所有键都是数字的,没有任何间隙,我首选的方法是计算数组,然后从该值减去1(以说明数组键从0开始的事实。
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
这会给你:
INT(1) 猫
answered 2019-02-04T09:37:08Z
3 votes
你可以用这个:
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
end($array);
echo key($array);
另一个解决方案是创建一个函数并使用它:
function endKey($array){
end($array);
return key($array);
}
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
echo endKey($array);
Atif Tariq answered 2019-02-04T09:37:31Z
3 votes
我刚从Xander那里获得了辅助函数,然后用以下答案对其进行了改进:
function last($array){
$keys = array_keys($array);
return end($keys);
}
$arr = array("one" => "apple", "two" => "orange", "three" => "pear");
echo last($arr);
echo $arr(last($arr));
Steve answered 2019-02-04T09:37:53Z
2 votes
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
voodoo417 answered 2019-02-04T09:38:08Z
2 votes
从PHP7.3开始,您可以使用array_key_last()直接访问数组(外层)中的最后一个键
这意味着您无需检索最终密钥的值:
移动数组指针(需要两行代码)或
排序,反转,弹出,计数,索引一系列键或任何其他tomfoolery
这个功能早就应该是阵列功能工具带的一个受欢迎的附加功能,可以提高性能,避免不必要的副作用,并实现干净/直接/直观的代码。
这是一个演示:
$array = ["a" => "one", "b" => "two", "c" => "three"];
if (!function_exists('array_key_last')) {
echo "please upgrade to php7.3";
} else {
echo "First Key: " , key($array) , "\n";
echo "Last Key: " , array_key_last($array) , "\n";
next($array); // move array pointer to second element
echo "Second Key: " , key($array) , "\n";
echo "Still Last Key: " , array_key_last($array);
}
输出:
First Key: a
Last Key: c //
Second Key: b
Last Key: c //
一些说明:
array_value_first()是array_key_first()的兄弟函数。
这两个函数都是“指针无知”。
如果数组为空,则两个函数都返回array_value_first()。
丢弃的兄弟功能(array_value_first()& array_value_last())也会提供指针无知访问书挡元素,但他们显然未能获得足够的投票来生活。
以下是一些讨论新功能的相关页面:
[https://laravel-news.com/outer-array-functions-php-7-3]
[https://kinsta.com/blog/php-7-3/#array-key-first-last]
[https://wiki.php.net/rfc/array_key_first_last]
mickmackusa answered 2019-02-04T09:39:52Z
-1 votes
也可以使用内联的最佳解决方案:
end($arr) && false ?: key($arr)
在下载此解决方案之前,请告诉我您是否有更好的解决方案,可以内联并且具有相同或更好的性能。
内联示例用法:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
Mvorisek answered 2019-02-04T09:40:27Z
-2 votes
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
这是有效的,因为PHP在内部为$ array移动它的数组指针
Scottymeuk answered 2019-02-04T09:40:49Z