Вставить первый элемент массива вместо последнего (обратное array_pop)?

Есть ли функция PHP, которая «выталкивает» первый элемент массива?
array_pop() выскакивает последний элемент, но я бы хотел выскочить первый.

Ответов (4)

Решение

Вы ищете array_shift ().

Сдвиг массива PHP

Хотя 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 пар там, где это необходимо.

[РЕДАКТИРОВАТЬ] Я должен упомянуть, что обратная сторона метода обратного попа - это потребление памяти, когда array_reverse() генерируется новый массив, а 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_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