Agregar elementos a un array vacío en PHP: ¿qué pasa internamente?

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

La magia del contenedor vacío: cómo hacer que PHP trabaje para ti

\n\n

Imagina que estás escribiendo un script en PHP y necesitas recolectar datos, por ejemplo, los IDs de productos de un carrito de compras. Creas un array vacío y luego, en un bucle, le agregas elementos. Parece sencillo, ¿verdad? Pero justo este momento —agregar elementos a un array vacío en PHP— genera miles de preguntas en Stack Overflow. ¿Por qué? Porque los principiantes suelen confundir la sintaxis, y los desarrolladores experimentados quieren entender qué sucede «bajo el capó».

\n\n

En este artículo no solo te mostraremos cómo escribir el código correctamente. Exploraremos el núcleo de PHP (Zend Engine), analizaremos en qué se diferencia $arr[] = $value de array_push() y descubriremos las sorpresas que trae PHP 8.1. ¿Listo? ¡Allá vamos!

\n\n

La pregunta más frecuente: ¿cómo agregar un elemento?

\n\n

Si eres principiante, probablemente lo primero que se te ocurra sea escribir algo como:

\n\n
<?php\n$myArray = array(); // array vacío\n$myArray[] = 'primer elemento';\n$myArray[] = 'segundo elemento';\nprint_r($myArray);\n?>
\n\n

Este código mostrará:

\n\n
Array\n(\n    [0] => primer elemento\n    [1] => segundo elemento\n)
\n\n

¿Funciona? Sí. ¿Pero por qué? Analicemos qué hace realmente el operador [].

\n\n

El operador $arr[] = $value: rápido y elegante

\n\n

Cuando escribes $arr[] = $value, PHP no llama a ninguna función. En su lugar, accede directamente a la estructura interna de datos del array (zend_array en términos del Zend Engine).

\n\n

Qué sucede bajo el capó:

\n
    \n
  • PHP verifica si el array existe. Si no, crea uno nuevo (pero es mejor inicializarlo siempre explícitamente: $arr = []).
  • \n
  • Agrega el elemento al final del array, asignándole automáticamente la siguiente clave numérica (0, 1, 2...).
  • \n
  • Si el array estaba vacío, el primer elemento recibe la clave 0.
  • \n
  • Sin sobrecarga por llamada a función. Es la forma más eficiente.
  • \n
\n\n

Consejo: usa $arr[] = ... siempre que necesites agregar un elemento al final. Es rápido, legible y no requiere importar funciones.

\n\n

array_push(): cuando necesitas agregar varios elementos a la vez

\n\n

La segunda forma popular es la función array_push():

\n\n
<?php\n$myArray = [];\narray_push($myArray, 'primero', 'segundo', 'tercero');\nprint_r($myArray);\n?>
\n\n

El resultado será el mismo. Pero hay matices:

\n
    \n
  • array_push() recibe el array por referencia y agrega todos los valores pasados al final.
  • \n
  • Devuelve el nuevo número de elementos en el array (a partir de PHP 7.3).
  • \n
  • Bajo el capó: la función llama al procedimiento interno zend_hash_next_index_insert por cada elemento. Esto significa que si agregas un solo elemento, array_push() es un poco más lento que $arr[] = ... debido a la sobrecarga de la llamada a función.
  • \n
\n\n

Cuándo usarlo: solo si necesitas agregar varios elementos a la vez (2 o más). Para un solo elemento, olvídate de array_push y usa [].

\n\n

Array vacío y claves: ¿qué pasa si las claves no son numéricas?

\n\n

¿Y si quieres agregar un elemento con una clave específica? Por ejemplo, un array asociativo:

\n\n
<?php\n$user = [];\n$user['name'] = 'Juan';\n$user['age'] = 30;\n?>
\n\n

Aquí también es sencillo. El operador [] con una clave dentro de los corchetes ($arr['key'] = value) funciona como una asignación. Si la clave no existe, se crea. Si existe, se sobrescribe.

\n\n

Pero ten cuidado: si accidentalmente escribes $user[] = 'valor' junto a un array asociativo, PHP agregará una clave numérica

Blogs

Book Recommendations