array_push($arr, $value) añade un valor al final de un array. Para un solo valor, el atajo $arr[] = $value; hace lo mismo sin llamar a una función y es lo que usa la mayoría del código PHP. Los dos cambian el array en el sitio.
array_push() recibe el array por referencia, así que modifica la variable que le pasas. Devuelve el nuevo número de elementos, que puedes ignorar.
array_push vs $arr[] =
Usa $arr[] = $value para un valor: es más corto y evita una llamada a función, algo que se nota dentro de un bucle grande. Usa array_push() cuando tengas varios valores que añadir en una sentencia, o una lista de valores que desplegar.
$arr[] = también funciona con una variable que aún no existe: PHP crea el array. array_push() necesita un array existente: con una variable no definida lanza TypeError: array_push(): Argument #1 ($array) must be of type array, null given.
Añadir una clave y un valor
array_push() solo añade valores con la siguiente clave entera. Para añadir una clave con nombre, asígnale el valor. Para añadir varios pares a la vez, usa += (conserva las claves existentes) o array_merge() (hace que ganen los valores nuevos).
La diferencia entre + y array_merge() cuando las claves coinciden se explica en la página de array_merge.
Añadir al principio: array_unshift
array_unshift($arr, $value) inserta al principio. Las claves enteras se renumeran para que el nuevo valor tenga el índice 0; las claves de texto se quedan como están. Igual que array_push(), acepta varios valores y devuelve el nuevo total.
Para poner primero un par con nombre, construye un array nuevo: $menu = ['login' => '/login'] + $menu;.
Insertar en una posición concreta
array_splice($arr, $offset, 0, $values) inserta sin eliminar nada: empieza en $offset, elimina 0 elementos y coloca ahí los valores nuevos. Las claves enteras posteriores al punto de inserción se renumeran.
array_splice() también puede eliminar y sustituir elementos; la página sobre eliminar elementos muestra esas formas.
Añadir otro array
array_push($a, $b) añade $b como un único elemento anidado, que rara vez es lo que quieres. Para añadir los valores de $b uno a uno, despliégalos, o construye un array nuevo con la sintaxis spread o array_merge().
Error frecuente: asignar el valor de retorno
array_push() devuelve un número, el nuevo total de elementos. Volver a asignarlo a la variable del array sustituye tu array por un entero, y el siguiente array_push() sobre ella lanza un TypeError.
Lo mismo vale para array_unshift() y para sort(), que devuelve true. Las funciones que cambian un array en el sitio devuelven un estado, no el array.
Preguntas frecuentes
¿Cuál es la diferencia entre array_push y $arr[] en PHP?
Los dos añaden al final. $arr[] = $x; añade un valor sin llamar a una función, así que es la opción habitual y algo más rápida. array_push($arr, $a, $b, $c) es práctico cuando añades varios valores a la vez, y devuelve el nuevo número de elementos.
¿Cómo añado una clave y un valor a un array en PHP?
Asigna a la clave: $arr['color'] = 'blue';. array_push() no puede hacerlo porque siempre usa la siguiente clave entera. Para añadir varios pares a la vez, usa $arr += ['a' => 1, 'b' => 2]; o array_merge().
¿Cómo añado un elemento al principio de un array en PHP?
Usa array_unshift($arr, $value). Renumera las claves enteras para que el nuevo valor tenga el índice 0; las claves de texto se quedan como están.
¿Por qué mi array se convierte en un número después de array_push?
Porque array_push() devuelve el nuevo número de elementos, no el array. Escribir $arr = array_push($arr, 'x'); sustituye el array por ese número. Llámala en su propia línea: array_push($arr, 'x');.