在PHP中获取数组的最后一个元素,但不改变该数组?

9

array_pop()函数从数组中删除最后一个元素。 end()函数改变内部指针。

难道唯一的方法就是像这样使用“cludge”吗:

$my_array[array_pop(array_keys($my_array))];

?


公平地说,最后的结果取决于你的键。 - Jason McCreary
6个回答

24
这有效:
list($end) = array_slice($array, -1);

array_slice($array, -1)函数返回一个只包含最后一个元素的数组,list()函数将这个数组的第一个元素赋值给变量$end

@Alin Purcaru 在评论中提出了这个建议:

$end = current(array_slice($array, -1));

自 PHP 5.4 版本以来,这也可以工作:

array_slice($array, -1)[0]

4
获取数组中唯一元素时,使用 $end = current(array_slice($array, -1)); 的方法如何?相较于使用 list 方法,你认为哪个更好? - Alin Purcaru
很酷,谢谢。我希望有一些函数或方法是我没有找到的。 - Joren
1
很遗憾,array_slice($array,-1)不适用于关联数组。因此我使用以下函数pop_array_nondestructive($array):return end($array); - LibraryThingTim

2

当你使用 end() 后,再使用 reset() 呢?

$lastItem = end($myArr);
reset($myArr);

1
因为它会改变内部指针,而OP似乎不想改变内部指针? :) - Arnaud Le Blanc
@arnaud 我知道它会重置指针,但至少它会将其放在默认的开头位置。你的解决方案更适合不重置指针的情况。 - Alin Purcaru

0

不幸的是

list($end) = array_slice($array, -1);

不支持关联数组。所以我使用

function pop_array_nondestructive( $array )
    {
    return end($array);
    }

0
  • 获取最后一个键:
  • $last_key = array_key_last($my_array); //Get the last key of the given array without affecting the internal array pointer.
    
  • 获取最后一个元素:
  • echo $my_array[$last_key];
    

    0
    <?php
    /**
     * Return last element from array without removing that element from array.
     * https://github.com/jdbevan/PHP-Scripts/
     * 
     * @param array $array The array to get the last element from
     * @return mixed False if $array is not an array or an empty array, else the key of the last element of the array.
     */ 
    function array_peek($array) {
        if (!is_array($array)) return false;
        if (count($array)<1) return false;
    
        $last_key = array_pop(array_keys($array));
        return $array[$last_key];
    }
    ?>
    

    -5
    end($my_array);
    

    我认为更改内部指针并无大碍。反正现在也没有人使用它。


    7
    再次用讽刺的回答而不阅读问题。你真应该停止这样做。 翻译:请停止无视问题直接进行讽刺回答。 - Alin Purcaru
    你知道那是最快枪问题,哈哈。尽管我已经仔细阅读了问题,但我仍然看不出问题的意义。 - Your Common Sense
    @Alin,这里有什么问题吗?虽然有些晚了,但这是一个有效的答案和观点,它是一个不常用的函数。 - Jason McCreary
    2
    @你们两个都看一下问题。你们最终会明白的。 - Alin Purcaru
    @ Alin,我有。也许你应该像你的回答建议的那样使用 end() - Jason McCreary
    尝试理解提问者的问题固然有其目的(虽然在这里不适用),但是current(array_slice($array, -1))更为出色,因为当传递非变量参数时(*current(array_slice(get_array(), -1))*),你不会遇到严格标准问题。 - Dan Lugg

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接