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
如果你不关心修改内部指针(以下行同时支持索引数组和关联数组):
// false if empty array
$last = end($array);
// null if empty array
$last = !empty($array) ? end($array) : null;
如果你想要一个不修改内部指针的实用函数(因为数组是按值传递给函数的,所以函数对它的副本进行操作):
function array_last($array) {
if (empty($array)) {
return null;
}
return end($array);
}
不过,PHP会“动态”地生成副本,即仅在实际需要时才生成副本。当end()函数修改数组时,会在内部生成整个数组(减去一项)的副本。
因此,我会推荐下面的替代方案,它实际上更快,因为在内部它不复制数组,它只是做一个切片:
function array_last($array) {
if (empty($array)) {
return null;
}
foreach (array_slice($array, -1) as $value) {
return $value;
}
}
此外,“foreach / return”是一个有效获取第一项(这里是单一项)的调整。
最后,最快的替代方法,但只适用于索引数组(并且没有空格):
$last = !empty($array) ? $array[count($array)-1] : null;
为了记录,这是我的另一个答案,对于数组的第一个元素。