La magia de un contenedor vacío: Cómo hacer que PHP trabaje para ti
\n\nImagina: estás escribiendo un script de PHP y necesitas recolectar datos — por ejemplo, IDs de productos de un carrito de compras. Creas un array vacío, luego agregas elementos en un bucle. Parece bastante simple, ¿verdad? Pero es precisamente este momento — agregar elementos a un array vacío de PHP — el que genera miles de preguntas en Stack Overflow. ¿Por qué? Porque los principiantes a menudo confunden la sintaxis, y los desarrolladores experimentados quieren entender qué sucede "bajo el capó".
\n\nEn este artículo, no solo te mostraremos cómo escribir el código correctamente. Analizaremos el núcleo de PHP (Zend Engine), desglosaremos cómo $arr[] = $value se diferencia de array_push(), y descubriremos qué sorpresas tiene preparadas PHP 8.1. ¿Listo? ¡Vamos!
La pregunta más común: ¿Cómo agregar un elemento?
\n\nSi eres principiante, lo primero que probablemente te viene a la mente es 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\nEste código mostrará:
\n\nArray\n(\n [0] => primer elemento\n [1] => segundo elemento\n)\n\n¿Funciona? Sí. Pero ¿por qué? Analicemos qué hace realmente el operador [].
El operador $arr[] = $value: Rápido y elegante
\n\nCuando escribes $arr[] = $value, PHP no llama a ninguna función. En su lugar, accede directamente a la estructura de datos interna del array (zend_array en términos del Zend Engine).
Qué sucede bajo el capó:
\n- \n
- PHP verifica si el array existe. Si no, crea uno nuevo (pero siempre es mejor inicializarlo 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 obtiene la clave
0. \n - Sin sobrecarga de llamada a función. Esta es la forma más eficiente. \n
Consejo: usa $arr[] = ... siempre que simplemente necesites agregar un elemento al final. Es rápido, legible y no requiere importar funciones.
array_push(): Cuando necesitas agregar múltiples elementos a la vez
\n\nEl segundo método popular es la función array_push():
<?php\n$myArray = [];\narray_push($myArray, 'primero', 'segundo', 'tercero');\nprint_r($myArray);\n?>\n\nEl resultado será el mismo. Pero hay matices:
\n- \n
array_push()toma 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_insertpara cada elemento. Esto significa que si estás agregando un solo elemento,array_push()es ligeramente más lento que$arr[] = ...debido a la sobrecarga de la llamada a la función. \n
Cuándo usarlo: solo si necesitas agregar múltiples elementos a la vez (2 o más). Para un solo elemento — olvídate de array_push, usa [].
Array vacío y claves: ¿Qué pasa si las claves no son numéricas?
\n\n¿Qué sucede si quieres agregar un elemento con una clave específica? Por ejemplo, un array asociativo:
\n\n<?php\n$user = [];\n$user['nombre'] = 'Iván';\n$user['edad'] = 30;\n?>\n\nEsto también es simple. El operador [] con una clave dentro de los corchetes ($arr['clave'] = valor) funciona como una asignación. Si la clave no existe, se crea. Si existe, se sobrescribe.
Pero ten cuidado: si accidentalmente escribes $user[] = 'valor' junto a un array asociativo, PHP agregará una clave numérica.