PHP如何弹出数组的最后一个元素而不实际从数组中删除它?

4

可能是重复问题:
PHP获取数组中最后插入项的索引

我有一个长度可变的数组或变量,并希望快速简单地知道数组中最后一项的值(而不实际从数组中删除它)。如何弹出数组中的最后一项,而不实际将其从数组中删除?


3
那就不叫“爆破”了 ;) - craig1231
4个回答

15

试试end

<?php

$fruits = array('apple', 'banana', 'cranberry');
echo end($fruits); // cranberry

?>

4
这个方法可以运行,但是有一个意料之外的副作用:数组指针被设置在了末尾,所以如果你尝试遍历数组,它将不会从开头开始,除非你对指针进行重置。 - Andrew
1
@Andrew:那就在副本上操作或通过键获取:$last = $array[end(array_keys($array))]; - 另请参阅您问题的重复。 - hakre

3

对于数字(非关联)从零开始的数组,您可以使用以下内容:

$arr = array('one', 'two', 'three', 'four', 'five');
print $arr[count($arr)-1];  // 'five'

1
如果数组为空怎么办?没有像 $arr[-1] 这样的元素。 - lsblsb
只有在纯数字数组中,且没有任何元素(在中间)被移除时才有效。 - Radon8472

1

使用数组结尾 如果我有一个数组:

$array_example = array('one', 'two', 'three');

如果我想获取最后一个项目,可以这样做:

echo end($array_example);

这将回显出数组的最后一个元素,但不会影响到数组本身。

在执行此操作后,如果想将内部数组指针重置为数组中的第一个项(以便可以正常继续工作),只需重置数组指针即可:

reset($array_example);

这会影响数组,但对于此处提出的问题有效。如果您阅读 end 的文档,您会发现它将更改数组的内部指针,因此其他迭代函数可能无法按预期工作。 - hackartist
是的,但他只是希望在不失去数组中最后一个项目的意义上不影响数组。我认为移动内部指针不会改变数组...所以我没有提到它。 - YonoRan

0

$lastitem = $array[count($array)-1]

这是一种使用end函数的替代方法,以避免使数组的内部指针移动到数组的最后一个元素 end - php.net


值得被负评吗?似乎只是一种做法,减去了括号和方括号的语法错误。 - thescientist
是啊,我不知道谁给了你负一分。在我看来这不公平,所以我给你加一分。 - Andrew
已进行编辑以反映正确的语法并强调使用end的潜在后果。 - thescientist
是的,这就是我通常的做法,这样我就不必担心php在内部指针方面的操作。但是我想使用“end”更加简洁易读...谁给我点了反对票? - hackartist
4
PHP数组的最后一个元素并不一定具有键名count($array)-1,即使键都是数字类型,因为PHP中的“数组”实际上是链表。如果您执行 $a[1] = 'orange' 和 $a[0] = 'apple',那么end($a)将会返回'apple',因为'apple'是最后一个被添加的元素。 - miyasudokoro

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