W3docs

Entendiendo la función array_shift de PHP

La función array_shift en PHP elimina el primer elemento de un array y devuelve su valor. Aprende su sintaxis y comportamiento.

La función array_shift en PHP elimina el primer elemento de un array y devuelve su valor. Como siempre opera sobre el inicio del array, es la herramienta natural para consumir una lista desde el principio: procesar una cola, quitar una fila de encabezado o eliminar un elemento inicial no deseado.

Dos aspectos hacen que array_shift sea distinta de simplemente hacer unset de $array[0]:

  • Modifica el array original en su lugar (pasado por referencia) — no se crea un nuevo array.
  • Re-indexa las claves numéricas, de modo que los elementos restantes siempre comienzan de nuevo en 0. Las claves de tipo string no se modifican.

Esta página cubre la sintaxis, el valor de retorno, el importante comportamiento de re-indexación, un error común en bucles y varios ejemplos ejecutables.

Sintaxis

array_shift(array &$array): mixed
ParteSignificado
&$arrayEl array del que se extrae. Se pasa por referencia, por lo que se modifica directamente.
valor de retornoEl valor del primer elemento eliminado, o null si el array está vacío.

Como el array se pasa por referencia, se llama a array_shift($colors) sobre una variable — no sobre un literal ni sobre el resultado de una función.

Eliminar el primer elemento

El uso más común es descartar el primer elemento. La función muta el array directamente:

php— editable, runs on the server

El resultado será:

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

Capturar el valor eliminado

array_shift devuelve el elemento que eliminó, de modo que puedes conservarlo mientras reduces el array en una sola instrucción:

php— editable, runs on the server

El resultado será:

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

Las claves se re-indexan

Este es el comportamiento que más sorprende. array_shift no simplemente elimina $array[0] — renumera todas las claves enteras restantes desde 0. Las claves de tipo string conservan sus nombres.

<?php

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

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

print_r($data);

?>

El resultado será:

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

Observa que 10 => "b" pasó a ser 0 => "b", mientras que "x" => "c" no fue modificado. Si necesitas conservar las claves numéricas originales, usa array_slice en su lugar.

Procesar un array como una cola

Un patrón habitual es vaciar un array desde el inicio, procesando un elemento a la vez. El idioma estándar usa array_shift dentro de un bucle while:

php— editable, runs on the server

El resultado será:

Running: build
Running: test
Running: deploy

El bucle se detiene porque array_shift devuelve null cuando el array está vacío.

Error común: no uses una prueba de verdad en el bucle

Con frecuencia se ve esta forma más corta:

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

Funciona para strings como "build", pero es una trampa. La condición es verdadera solo mientras el valor sea verdadero, por lo que el bucle termina antes de tiempo al encontrar el primer 0, "", "0", false o null:

<?php

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

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

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

?>

El resultado será:

3
Array
(
    [0] => 1
)

El bucle se detuvo en 0, dejando 1 sin procesar. Compara siempre con null de forma explícita (!== null) cuando los valores pueden ser falsy.

Eliminar varios elementos iniciales

Llamar a array_shift de forma repetida extrae elementos del inicio. Aquí eliminamos los primeros tres:

php— editable, runs on the server

El resultado será:

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

Para eliminar un bloque inicial en una sola llamada en lugar de usar un bucle, utiliza array_splice($colors, 0, 3).

Funciones relacionadas

array_shift es una de las cuatro funciones para agregar y eliminar elementos en los extremos de un array:

FunciónActúa sobreQué hace
array_shiftInicioElimina y devuelve el primer elemento
array_unshiftInicioAgrega uno o más elementos al principio
array_popFinalElimina y devuelve el último elemento
array_pushFinalAgrega uno o más elementos al final

Para recortar sin mutar el array original, consulta array_slice; para eliminar o reemplazar un rango, consulta array_splice.

Conclusión

array_shift elimina el primer elemento de un array, devuelve su valor, modifica el array en su lugar y re-indexa las claves enteras restantes desde 0. Es ideal para consumir un array como cola y para eliminar elementos iniciales no deseados — recuerda el comportamiento de re-indexación y la trampa del bucle con valores falsy comentados anteriormente.

Práctica

Práctica
¿Qué hace la función array_shift() en PHP?
¿Qué hace la función array_shift() en PHP?
Was this page helpful?