Ok,

我知道所有关于array_pop(),但它删除了最后一个元素。如何获得数组的最后一个元素而不删除它?

这里有一个奖励:

$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

当前回答

我认为这是对所有现有答案的轻微改进:

$lastElement = count($array) > 0 ? array_values(array_slice($array, -1))[0] : null;

执行效果优于end()或使用array_keys()的解决方案,特别是对于大型数组 不会修改数组的内部指针 不会尝试访问空数组的未定义偏移量 将工作如预期的空数组,索引数组,混合数组,和关联数组

其他回答

我的简单解决方案,漂亮且容易理解。

array_reverse($array)[0];

在几乎每一种带有数组的语言中,使用A[A.size-1]都不会出错。我想不出一个基于1的数组(而不是基于0的数组)的语言例子。

通过使用下面的逻辑,您可以轻松地从数组中获取最后一个元素

$array = array('a', 'b', 'c', 'd');
echo ($array[count($array)-1]);

使用下面的逻辑,不仅可以得到最后一个元素,还可以得到第二个最后一个元素,第三个最后一个元素等等。

对于倒数第二个元素,你必须在上面的语句中只传递数字2,例如: 回声($阵列[count(数组)美元2]);

$lastValue = end(array_values($array))

不修改$array指针。这就避免了

reset($array)

这在某些情况下可能并不理想。

PHP 7.3版引入了函数array_key_first和array_key_last。

由于PHP中的数组不是严格的数组类型,即从索引0开始的固定大小字段的固定大小集合,而是动态扩展的关联数组,因此处理具有未知键的位置很困难,而且变通方法执行得不好。相比之下,实数组将通过指针算术在内部快速寻址,并且在编译时通过声明已经知道最后一个索引。

至少从7.3版开始,第一个和最后一个位置的问题已经通过内置函数解决了。这甚至可以在没有任何警告的情况下对数组字面量开箱即用:

$first = array_key_first( [1, 2, 'A'=>65, 'B'=>66, 3, 4 ] );
$last  = array_key_last ( [1, 2, 'A'=>65, 'B'=>66, 3, 4 ] );

显然,最后一个值是:

$array[array_key_last($array)];