La magia del contenedor vacío: cómo hacer que PHP trabaje para ti
\n\nImagina 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\nEn 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!
La pregunta más frecuente: ¿cómo agregar un elemento?
\n\nSi 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\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 interna de datos 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 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
Consejo: usa $arr[] = ... siempre que necesites agregar un elemento al final. Es rápido, legible y no requiere importar funciones.
array_push(): cuando necesitas agregar varios elementos a la vez
\n\nLa segunda forma 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()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_insertpor 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
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 [].
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\nAquí 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.
Pero ten cuidado: si accidentalmente escribes $user[] = 'valor' junto a un array asociativo, PHP agregará una clave numérica