是否有一种PHP函数可以“弹出”数组的第一个元素?
array_pop()
弹出最后一个元素,但我想要弹出第一个。
快速备忘单 如果您不熟悉术语,这里是一份备忘单,其中包含替代术语的快速翻译,可能更容易记住:
* 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()
简单地通过从后到前复制传递给它的数组来返回一个新的数组。在需要保留 key => value
对的情况下,可以使用 array_reverse($array, true)
。
[编辑] 值得注意的是,反向弹出方法的缺点是内存消耗较大,而 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
使用key()
和unset()
。
当数组的键是数字时,array_shift()
会将数组键更改为从0开始。
$arr = [5 => 5, 71 => 71, 1 => 1, 8 => 8];
$first_key = key($arr);
$first_element = $arr[$first_key]; // <-- get first element of array
echo $first_element; // print '5'
unset($arr[$first_key]); // <-- delete first element of array