【问题标题】:What's the best way to get the last element of an array without deleting it?获取数组的最后一个元素而不删除它的最佳方法是什么?
【发布时间】:2025-11-25 16:10:02
【问题描述】:

好的,

我对@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 设为“已接受的答案”(供您考虑)...

标签: php arrays


【解决方案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

    【讨论】:

      最近更新 更多