Есть ли PHP-функция, которая "выталкивает" первый элемент массива?
array_pop()
выскакивает последний элемент, но я бы хотел выдвинуть первый.
Вставить первый элемент массива вместо последнего (перевернутый array_pop)?
Ответ 1
Вы ищете array_shift().
Ответ 2
Quick Cheatsheet Если вы не знакомы с жаргоном, вот быстрый перевод альтернативных терминов, которые могут быть легче запомнить:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )
Ответ 3
Для меня 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
Ответ 4
Хотя 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] Следует отметить, что недостатком метода обратного всплытия является потребление памяти, когда array_reverse()
генерирует новый массив, а array_shift()
работает на месте. Таким образом, занимает больше времени.