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