W3docs

Функция array_shift в PHP

Функция array_shift в PHP удаляет первый элемент массива и возвращает его значение. Узнайте о синтаксисе, переиндексации и типичных ошибках.

Функция array_shift в PHP удаляет первый элемент из массива и возвращает его значение. Поскольку она всегда работает с началом массива, это естественный инструмент для последовательной обработки списка — выполнение очереди задач, удаление строки заголовка или лишнего первого элемента.

array_shift отличается от простого удаления $array[0] двумя важными особенностями:

  • Она изменяет исходный массив на месте (передаётся по ссылке) — новый массив не создаётся.
  • Она переиндексирует числовые ключи, поэтому оставшиеся элементы всегда начинаются с 0. Строковые ключи остаются неизменными.

На этой странице рассматривается синтаксис, возвращаемое значение, поведение при переиндексации, распространённая ловушка в циклах и несколько рабочих примеров.

Синтаксис

array_shift(array &$array): mixed
ЧастьОписание
&$arrayМассив, из которого производится сдвиг. Передаётся по ссылке, поэтому изменяется напрямую.
возвращаемое значениеЗначение удалённого первого элемента или null, если массив пуст.

Поскольку массив передаётся по ссылке, array_shift($colors) вызывается для переменной — не для литерала или результата функции.

Удаление первого элемента

Наиболее распространённое использование — удаление первого элемента. Функция изменяет массив напрямую:

php— editable, runs on the server

Результат будет следующим:

Array
(
    [0] => green
    [1] => blue
)

Сохранение удалённого значения

array_shift возвращает удалённый элемент, поэтому можно сохранить его и одновременно уменьшить массив в одном выражении:

php— editable, runs on the server

Результат будет следующим:

red
Array
(
    [0] => green
    [1] => blue
)

Переиндексация ключей

Это поведение чаще всего удивляет разработчиков. array_shift не просто удаляет $array[0] — она перенумеровывает все оставшиеся целочисленные ключи начиная с 0. Строковые ключи сохраняют свои имена.

<?php

$data = [5 => "a", 10 => "b", "x" => "c"];

array_shift($data); // removes "a"

print_r($data);

?>

Результат будет следующим:

Array
(
    [0] => b
    [x] => c
)

Обратите внимание: 10 => "b" стало 0 => "b", тогда как "x" => "c" осталось без изменений. Если необходимо сохранить исходные числовые ключи, используйте вместо этого array_slice.

Обработка массива как очереди

Распространённый паттерн — последовательная обработка элементов массива с начала, по одному за раз. Стандартный подход использует array_shift внутри цикла while:

php— editable, runs on the server

Результат будет следующим:

Running: build
Running: test
Running: deploy

Цикл завершается, потому что array_shift возвращает null, когда массив становится пустым.

Ловушка: не используйте проверку на истинность в цикле

Часто встречается такая сокращённая форма:

while ($value = array_shift($queue)) { ... }

Для строк вроде "build" это работает, но это ловушка. Условие истинно только пока значение является истинным, поэтому цикл прервётся досрочно на первом встреченном 0, "", "0", false или null:

<?php

$numbers = array(3, 0, 1);

while ($n = array_shift($numbers)) {
    echo "$n\n";
}

print_r($numbers); // 1 was never processed

?>

Результат будет следующим:

3
Array
(
    [0] => 1
)

Цикл завершился на 0, оставив 1 необработанным. Всегда сравнивайте явно с null (!== null), если значения могут быть ложными.

Удаление нескольких первых элементов

Последовательные вызовы array_shift удаляют элементы с начала массива. Здесь мы удаляем первые три:

php— editable, runs on the server

Результат будет следующим:

Array
(
    [0] => yellow
    [1] => orange
)

Чтобы удалить несколько элементов с начала за один вызов вместо цикла, используйте array_splice($colors, 0, 3).

Связанные функции

array_shift — одна из четырёх функций для добавления и удаления элементов на концах массива:

ФункцияДействует наЧто делает
array_shiftНачалоУдаляет и возвращает первый элемент
array_unshiftНачалоДобавляет один или несколько элементов в начало
array_popКонецУдаляет и возвращает последний элемент
array_pushКонецДобавляет один или несколько элементов в конец

Для получения среза без изменения исходного массива см. array_slice; для удаления или замены диапазона элементов см. array_splice.

Заключение

array_shift удаляет первый элемент массива, возвращает его значение, изменяет массив на месте и переиндексирует оставшиеся целочисленные ключи начиная с 0. Функция идеально подходит для обработки массива как очереди и удаления нежелательных первых элементов — только не забывайте о поведении переиндексации и ловушке с ложными значениями в цикле, рассмотренных выше.

Практика

Практика
Что делает функция array_shift() в PHP?
Что делает функция array_shift() в PHP?
Was this page helpful?