【发布时间】:2009-02-26 08:07:58
【问题描述】:
是否有一个 PHP 函数可以“弹出”数组的第一个元素? array_pop() 弹出最后一个元素,但我想弹出第一个。
【问题讨论】:
是否有一个 PHP 函数可以“弹出”数组的第一个元素? array_pop() 弹出最后一个元素,但我想弹出第一个。
【问题讨论】:
您正在寻找 array_shift()。
【讨论】:
快速备忘单如果您不熟悉术语,这里是替代术语的快速翻译,可能更容易记住:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )
【讨论】:
虽然array_shift() 绝对是您问题的答案,但值得一提的是,在处理大型数组时,这可能是一个不必要的缓慢过程。 (或多次迭代)
在检索到第一个元素后,array_shift() 重新索引数组中的所有数字键,以便以前位于 [1] 的元素变为 [0],而位于 [10000] 的元素变为 [9999]。
数组越大,要重新索引的键就越多。如果您正在迭代大型数组,在多次迭代中调用array_shift,性能损失可能会增加。
基准测试表明,对于大型数组,颠倒数组顺序并从末尾弹出元素通常更便宜。
$array = array_reverse($array);
$value = array_pop($array);
array_pop() 显然不需要重新索引,因为它是从末尾获取的,array_reverse() 通过简单地从后向前复制传递给它的数组来返回一个新数组。 array_reverse($array, true) 可用于在需要时保留 key => value 对。
[EDIT] 我应该提一下,reverse-pop 方法的缺点是内存消耗,其中array_reverse() 生成一个新数组,而array_shift() 工作在适当的位置。因此需要更长的时间。
【讨论】:
对我来说 array_slice() 工作正常, 说:
$arr = array(1,2,3,4,5,6);
//array_slice($array,offset); where $array is the array to be sliced, and offset is the number of array elements to be sliced
$arr2 = array_slice($arr,3);//or
$arr2 = array_slice($arr,-3);//or
$arr2 = array_slice($arr,-3,3);//return 4,5 and 6 in a new array
$arr2 = array_slice($arr,0,4);//returns 1,2,3 and 4 in a new array
【讨论】: