首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >array_pop()数组中最后n个元素的最有效方法是什么?

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

Stack Overflow用户
提问于 2014-01-08 15:42:03
回答 4查看 6.5K关注 0票数 12

如何有效地弹出数组中的最后n个元素?

这里有一个:

代码语言:javascript
复制
$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);

有没有更有效的方法?

EN

回答 4

Stack Overflow用户

发布于 2014-01-08 15:47:00

使用array_splice()

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

代码语言:javascript
复制
function array_pop_n(array $arr, $n) {
    return array_splice($arr, 0, -$n);
}

Demo

如果希望只检索最后一个n元素,则可以使用以下函数:

代码语言:javascript
复制
function array_pop_n(array $arr, $n) {
    array_splice($arr,0,-$n);
    return $arr;
}

Demo

票数 22
EN

Stack Overflow用户

发布于 2014-01-08 16:00:15

需要注意的是,从其他答案来看,array_slice将保留原始数组,因此它仍将包含末尾的元素,而array_splice将对原始数组进行变异,删除开始时的元素(尽管在给定的示例中,函数创建了一个副本,因此原始数组仍然包含所有元素)。如果您想要从字面上模仿array_pop的东西(并且您不需要颠倒顺序,就像在OP中那样),那么请执行以下操作。

代码语言:javascript
复制
$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它,或者只是弹出它就像您原来的例子,它是足够有效的,更直接。

票数 4
EN

Stack Overflow用户

发布于 2014-01-08 15:45:51

为什么不使用array_slice。您可以给出一个开始和一个长度,所以如果从末尾执行2项,就会得到数组中的最后两个项:

代码语言:javascript
复制
$arr = range(1,10);
$n = 2;
$start = count($arr) - $n;
print_r(array_slice($arr, $start, $n));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21000108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档