获取数组的最后一个元素而不删除它的最佳方法是啥?
Posted
技术标签:
【中文标题】获取数组的最后一个元素而不删除它的最佳方法是啥?【英文标题】:What's the best way to get the last element of an array without deleting it?获取数组的最后一个元素而不删除它的最佳方法是什么? 【发布时间】:2011-04-10 21:12:14 【问题描述】:好的,
我对@987654321@ 了如指掌,但这会删除最后一个元素。获取数组的最后一个元素而不删除它的最佳方法是什么?
编辑:这是一个奖励:
$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
的非关联数组,那么end
和current(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
。
【讨论】:
以上是关于获取数组的最后一个元素而不删除它的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章