array_pop()数组中最后n个元素的最有效方法是什么?

时间:2014-01-08 15:42:04

标签: php arrays optimization

弹出数组中最后一个 n 元素的有效方法是什么?

这是一个:

$arr = range(1,10);
$n = 2;
$popped_array = array();
for ($i=0; $i < $n; $i++) { 
    $popped_array[] = array_pop($arr);
}
print_r($popped_array); // returns array(10,9);

有更有效的方法吗?

4 个答案:

答案 0 :(得分:10)

使用array_splice()

如果您尝试删除最后n个元素,请使用以下函数:

function array_pop_n(array $arr, $n) {
    return array_splice($arr, 0, -$n);
}

Demo


如果您只想检索最后n个元素,那么您可以使用以下函数:

function array_pop_n(array $arr, $n) {
    array_splice($arr,0,-$n);
    return $arr;
}

Demo

答案 1 :(得分:2)

为什么不使用array_slice。你可以给出一个开头和一个长度,所以如果从最后做2,你将获得数组中的最后两个项目:

$arr = range(1,10);
$n = 2;
$start = count($arr) - $n;
print_r(array_slice($arr, $start, $n));

答案 2 :(得分:2)

重要的是要注意,看看其他答案,array_slice将保留原始数组,因此它仍将包含最后的元素,并且array_splice将改变原始数组,删除元素开头(尽管在给出的示例中,函数创建一个副本,因此原始数组仍将包含所有元素)。如果你想要一些字面上模仿array_pop的东西(并且你不需要颠倒顺序,就像在你的OP中那样),那么请执行以下操作。

$arr = range(1, 10);
$n = 2;
$popped_array = array_slice($arr, -$n);
$arr = array_slice($arr, 0, -$n);
print_r($popped_array); // returns array(9,10);
print_r($arr); // returns array(1,2,3,4,5,6,7,8);

如果您要求$popped_array被撤消,array_reverse,或者只是像原始示例一样弹出它,它就足够高效,而且更加直接。

答案 3 :(得分:0)

感谢array_slice评论。我不知道为什么没有立即浮现在脑海中。

看起来(对我来说)最简单的方法是:

$arr = range(1,10);
$n = 2;
$popped_array = array_slice($arr,-$n);
print_r($popped_array); // returns array(10,9);