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| Parte | Significado |
|---|---|
&$array | El array del que se extrae. Se pasa por referencia, por lo que se modifica directamente. |
| valor de retorno | El 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:
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:
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:
El resultado será:
Running: build
Running: test
Running: deployEl 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:
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ón | Actúa sobre | Qué hace |
|---|---|---|
| array_shift | Inicio | Elimina y devuelve el primer elemento |
| array_unshift | Inicio | Agrega uno o más elementos al principio |
| array_pop | Final | Elimina y devuelve el último elemento |
| array_push | Final | Agrega 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.