获取数组的最后一个元素而不删除它的最佳方法是啥?

Posted

技术标签:

【中文标题】获取数组的最后一个元素而不删除它的最佳方法是啥?【英文标题】:What's the best way to get the last element of an array without deleting it?获取数组的最后一个元素而不删除它的最佳方法是什么? 【发布时间】:2011-04-10 21:12:14 【问题描述】:

好的,

我对@9​​87654321@ 了如指掌,但这会删除最后一个元素。获取数组的最后一个元素而不删除它的最佳方法是什么?

编辑:这是一个奖励:

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');

甚至

$array = array('a', 'b', 'c', 'd');
unset($array[2]);
echo $array[sizeof($array) - 1]; // Output: php Notice:  Undefined offset:  2 in - on line 4

【问题讨论】:

信不信由你弹出并重新安装是我进行基准测试的最快方法之一。 $val=$array[]=array_pop($array);回声 $val; 这个问题带来了很多选择。为了帮助自己选择,我对最显着/不同的选项进行了一些比较,并分享了结果as a separate answer。 (:@user2782001 在上面的评论中建议了我迄今为止最喜欢的。:) 感谢大家的贡献! @TheodoreRSmith PHP 7.3 发布后,您可以考虑将 (this suggestion by Quasimodo's clone 设为“已接受的答案”(供您考虑)... 【参考方案1】:

array_values(array_reverse($array))[0] 适用于所有这些情况。

【讨论】:

【参考方案2】:

这个怎么样?

例如-

$arr = [1,2,3];
$lastElem = count($arr) ? $arr[count($arr) - 1] : null;

【讨论】:

如果你有一个空数组$arr,你可能会遇到问题 @VolodymyrI。感谢您指出。我改了。【参考方案3】:

这里的大多数解决方案对于非关联数组都是不可靠的,因为如果我们有一个最后一个元素为false 的非关联数组,那么endcurrent(array_slice($array, -1)) 也会返回false,所以我们不能使用@987654326 @ 作为空的未关联数组的指示符。

// end returns false form empty arrays
>>> $arr = []
>>> end($arr)
=> false

// last element is false, so end returns false,
// now we'll have a false possitive that the array is empty
>>> $arr = [1, 2, 3, false]
>>> end($arr)
=> false

>>> $arr = [1, 2, 3, false, 4]
>>> end($arr)
=> 4

current(array_slice($arr, -1)) 也是如此:

// returns false form empty arrays
>>> $arr = []
>>> current(array_slice($arr, -1))
=> false

// returns false if last element is false
>>> $arr = [1, 2, 3, false]
>>> current(array_slice($arr, -1))
=> false

>>> $arr = [1, 2, 3, false, 4]
>>> current(array_slice($arr, -1))
=> 4

最好的选择是使用array_key_last,它可用于PHP >= 7.3.0 或旧版本,我们使用count 来获取最后一个索引(仅适用于未关联的数组):

// returns null for empty arrays
>>> $arr = []
>>> array_key_last($arr)
=> null

// returns last index of the array
>>> $arr = [1, 2, 3, false]
>>> array_key_last($arr)
=> 3

// returns last index of the array
>>> $arr = [1, 2, 3, false, 4]
>>> array_key_last($arr)
=> 4

对于旧版本,我们可以使用count:

>>> $arr = []
>>> if (count($arr) > 0) $arr[count($arr) - 1]
// No excecution

>>> $arr = [1, 2, 3, false]
>>> if (count($arr) > 0) $arr[count($arr) - 1]
=> false

>>> $arr = [1, 2, 3, false, 4]
>>> if (count($arr) > 0) $arr[count($arr) - 1]
=> 4

这就是非关联数组的全部内容。如果我们确定我们有关联的数组,那么我们可以使用end

【讨论】:

以上是关于获取数组的最后一个元素而不删除它的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中从数组中删除值的最佳方法是啥?

javascript获取数组最后一个元素(三种方法)

Scala:将元素附加到数组的最佳方法是啥?

js 获取数组最后一个元素

JAVA如何把字符串数组是最后一个数据删除?

在 PHP 中删除数组项的最佳方法是啥?