PHP:删除数组的第一个和最后一个项目

52

假设我有这个数组:

 $array = array('10', '20', '30.30', '40', '50');

问题:

如何最快/最简单地从上述数组中删除第一个项目?
如何最快/最简单地从上述数组中删除最后一个项目?

因此,结果数组仅包含以下值:

  • '20'
  • '30.30'
  • '40'

2
你为什么需要“最快”的方式?你的数组中有多少项? - Your Common Sense
@Col. Shrapnel:考虑一种情况,数组中有更多的项,我想他只是举了一个例子。 - Sarfraz
我拒绝考虑这种无意义的事情。大型数据数组是数据库问题。 - Your Common Sense
@Col. Shrapnel:您说得对,但是您会看到许多这样的问题,其中不需要优化,但是人们特别是新手仍然会询问。 - Sarfraz
因此,他们需要了解过早优化的危险。 - Your Common Sense
不,他们需要了解两者。针对OP的话:“过早优化是不好的!”好了,现在回答问题。 - Robert Martin
7个回答

78

使用array_slice是最简单的方法

$newarray = array_slice($array, 1, -1);

如果输入的数组元素少于3个,则输出的数组将为空。


14
你已将此答案标记为正确答案,但如果我是你,我会检查一下它是否真的正确。这个命令需要复制一个很大的内存段。使用array_{shift,pop}可以避免复制该内存。编写一个脚本,在其中实例化一个非常大的数组,然后调用你的函数,直到数组变为空(或只剩1个元素)。 - Robert Martin
我对 array_shiftarray_pop 的解决方案进行了基准测试,与 array_slice 的解决方案相比,使用 array_slice 要慢得多。 - Roham Rafii

71

要删除第一个元素,请使用array_shift,要删除最后一个元素,请使用array_pop

<?php    
$array = array('10', '20', '30.30', '40', '50');
array_shift($array);
array_pop($array);

我认为你的答案是正确的。它比array_slice有更好的性能。 - Roham Rafii

11
array_pop($array); // remove the last element
array_shift($array); // remove the first element

7
array_slice 是速度最快的,因为它只需要一个函数调用。
使用方法如下: array_slice($input, 1, -1); 但在执行此操作之前,请确保数组中至少有两个项目。

使用-1而不是count($input)-2会更好,不是吗? - Jeriko
是的,我一开始没有注意到。已经修复了。 - ryeguy
1
array_slice 需要创建一个新数组,这意味着它比 array_pop 慢得多。 - Pacerier
如果数组少于2个项目,则 array_slice 将起作用。 - Roham Rafii

6

请查看以下代码:

$arry = array('10', '20', '30.30', '40', '50');
$fruit = array_shift($arry);
$fruit = array_pop($arry);
print_r($arry);

5
从数组中移除第一个元素,并返回它:
array_shift($array);

从数组中删除最后一个元素,并返回该元素:
array_pop($array);

如果您不介意同时进行两个操作,可以使用以下方法:
array_shift($array,1,-1));

同时删除第一个和最后一个元素。
请查看array_pusharray_poparray_slice文档 :)

array_shift 不接受三个参数,它只有一个参数。array_shift($array, 1, -1) 是错误的! - Roham Rafii

1
<?php
$array  = array("khan","jan","ban","man","le");
$sizeof_array = sizeof($array);
$last_itme = $sizeof_array-1;
//$slicearray= array_slice($array,'-'.$sizeof_array,4);// THIS WILL REMOVE LAST ITME OF ARRAY
$slicearray = array_slice($array,'-'.$last_itme);//THIS WILL REMOVE FIRST ITEM OF ARRAY
foreach($slicearray as $key=>$value)
{
  echo $value;  
  echo "<br>";
}   
?>

array_slice 会创建一个新的数组,因此速度非常慢。这个答案使用了它两次!! - Roham Rafii

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