Entendendo a Função array_shift do PHP
A função array_shift no PHP remove o primeiro elemento de um array e retorna seu valor. Veja sintaxe, reindexação e exemplos práticos.
A função array_shift no PHP remove o primeiro elemento de um array e retorna seu valor. Como ela sempre atua no início do array, é a ferramenta natural para consumir uma lista pelo começo — processar uma fila, remover uma linha de cabeçalho ou retirar um item inicial indesejado.
Dois aspectos tornam array_shift diferente de simplesmente remover $array[0] com unset:
- Ela modifica o array original diretamente (passado por referência) — você não precisa construir um novo array.
- Ela reindexaliza as chaves numéricas, de modo que os elementos restantes sempre recomeçam a partir de
0. As chaves string são mantidas intactas.
Esta página cobre a sintaxe, o valor de retorno, o importante comportamento de reindexação, uma armadilha comum em loops e vários exemplos executáveis.
Sintaxe
array_shift(array &$array): mixed| Parte | Significado |
|---|---|
&$array | O array do qual será feito o shift. Passado por referência, portanto modificado diretamente. |
| valor de retorno | O valor do primeiro elemento removido, ou null se o array estiver vazio. |
Como o array é passado por referência, você chama array_shift($colors) em uma variável — não em um literal ou no resultado de uma função.
Removendo o primeiro elemento
O uso mais comum é descartar o primeiro elemento. A função modifica o array diretamente:
O resultado será:
Array
(
[0] => green
[1] => blue
)Capturando o valor removido
array_shift retorna o elemento que removeu, portanto você pode mantê-lo enquanto reduz o array em uma única instrução:
O resultado será:
red
Array
(
[0] => green
[1] => blue
)As chaves são reindexadas
Este é o comportamento que mais surpreende as pessoas. array_shift não apenas remove $array[0] — ela renumera todas as chaves inteiras restantes a partir de 0. As chaves string mantêm seus nomes.
<?php
$data = [5 => "a", 10 => "b", "x" => "c"];
array_shift($data); // removes "a"
print_r($data);
?>O resultado será:
Array
(
[0] => b
[x] => c
)Observe que 10 => "b" tornou-se 0 => "b", enquanto "x" => "c" foi mantido. Se você precisar preservar as chaves numéricas originais, use array_slice em vez disso.
Processando um array como uma fila
Um padrão comum é esvaziar um array pelo início, processando um elemento de cada vez. O idioma padrão usa array_shift dentro de um loop while:
O resultado será:
Running: build
Running: test
Running: deployO loop para porque array_shift retorna null quando o array fica vazio.
Armadilha: não use um teste de verdade no loop
Muitas vezes você verá esta forma mais curta:
while ($value = array_shift($queue)) { ... }Ela funciona para strings como "build", mas é uma armadilha. A condição é verdadeira somente enquanto o valor for truthy, portanto o loop para prematuramente no primeiro 0, "", "0", false ou null:
<?php
$numbers = array(3, 0, 1);
while ($n = array_shift($numbers)) {
echo "$n\n";
}
print_r($numbers); // 1 was never processed
?>O resultado será:
3
Array
(
[0] => 1
)O loop encerrou em 0, deixando 1 para trás. Sempre compare com null explicitamente (!== null) quando os valores puderem ser falsy.
Removendo vários elementos iniciais
Chamar array_shift repetidamente remove elementos do início. Aqui descartamos os três primeiros:
O resultado será:
Array
(
[0] => yellow
[1] => orange
)Para remover um bloco inicial em uma única chamada em vez de um loop, use array_splice($colors, 0, 3).
Funções relacionadas
array_shift é uma das quatro funções para adicionar e remover elementos nas extremidades de um array:
| Função | Atua em | O que faz |
|---|---|---|
| array_shift | Início | Remove e retorna o primeiro elemento |
| array_unshift | Início | Adiciona um ou mais elementos ao início |
| array_pop | Final | Remove e retorna o último elemento |
| array_push | Final | Adiciona um ou mais elementos ao final |
Para fatiar sem modificar o array original, veja array_slice; para remover ou substituir um intervalo, veja array_splice.
Conclusão
array_shift remove o primeiro elemento de um array, retorna seu valor, modifica o array diretamente e reindexaliza as chaves inteiras restantes a partir de 0. É ideal para consumir um array como uma fila e para remover itens iniciais indesejados — lembre-se apenas do comportamento de reindexação e da armadilha do loop com valores falsy abordada acima.