W3docs

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
ParteSignificado
&$arrayO array do qual será feito o shift. Passado por referência, portanto modificado diretamente.
valor de retornoO 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:

php— editable, runs on the server

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:

php— editable, runs on the server

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:

php— editable, runs on the server

O resultado será:

Running: build
Running: test
Running: deploy

O 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:

php— editable, runs on the server

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çãoAtua emO que faz
array_shiftInícioRemove e retorna o primeiro elemento
array_unshiftInícioAdiciona um ou mais elementos ao início
array_popFinalRemove e retorna o último elemento
array_pushFinalAdiciona 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.

Prática

Prática
O que a função array_shift() faz no PHP?
O que a função array_shift() faz no PHP?
Was this page helpful?