Rya*_*yan 4 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);
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?
Ama*_*ali 11
如果您要删除最后一个n元素,请使用以下函数:
function array_pop_n(array $arr, $n) {
return array_splice($arr, 0, -$n);
}
Run Code Online (Sandbox Code Playgroud)
如果只想检索最后一个n元素,则可以使用以下函数:
function array_pop_n(array $arr, $n) {
array_splice($arr,0,-$n);
return $arr;
}
Run Code Online (Sandbox Code Playgroud)
重要的是要注意,查看其他答案, 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);
Run Code Online (Sandbox Code Playgroud)
如果您需要$popped_array反转array_reverse它,或者只是像原始示例一样弹出它,它就足够有效并且更直接。
为什么不使用array_slice. 您可以给出一个开始和一个长度,因此如果您从末尾执行 2,您将获得数组中的最后两项:
$arr = range(1,10);
$n = 2;
$start = count($arr) - $n;
print_r(array_slice($arr, $start, $n));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2884 次 |
| 最近记录: |