Cómo eliminar un elemento de un array en PHP: de principiante a experto
\n\nImagina que estás desarrollando una tienda online en PHP. Llega un pedido, pero el producto se agotó en el almacén y debes quitarlo del carrito. O estás procesando una lista de usuarios y alguien decide eliminar su cuenta. En ambos casos, necesitas eliminar un elemento de un array en PHP.
\n\nParece sencillo, ¿verdad? Pero aquí los principiantes suelen caer en una trampa. Simplemente usar unset() puede romper el array: las claves dejan de ser secuenciales y un bucle foreach empieza a dar sorpresas. No te preocupes, analizaremos todos los detalles y aprenderemos a eliminar elementos correctamente.
Este artículo es una adaptación de una pregunta popular en Stack Overflow con miles de visitas. Hemos traducido las respuestas complejas a un lenguaje sencillo y añadido ejemplos de la práctica real.
\n\n¿Qué es un array en PHP y por qué es importante "limpiarlo"?
\n\nUn array es un contenedor de datos. Imagina una caja con celdas, donde cada celda tiene un número (índice) o un nombre (clave). A veces los datos en esas celdas se vuelven obsoletos y hay que eliminarlos.
\n\nEn PHP existen dos tipos de arrays:
\n\n- \n
- Indexados — claves: 0, 1, 2, 3... (como una lista de productos). \n
- Asociativos — claves: cadenas de texto (ej.
"nombre" => "Carlos"). \n
Y para cada tipo existe una forma "correcta" de eliminar. Si te equivocas, obtendrás un error difícil de depurar.
\n\n\n\n
Método #1: unset() — la fuerza bruta (y sus consecuencias)
\n\nLa función unset($array[$clave]) es la forma más obvia de eliminar un elemento de un array en PHP. Simplemente destruye la variable o el elemento del array.
<?php\n$frutas = ['manzana', 'plátano', 'cereza', 'dátil'];\nunset($frutas[1]); // eliminamos 'plátano'\nprint_r($frutas);\n?>\n\nResultado:
\n\nArray\n(\n [0] => manzana\n [2] => cereza\n [3] => dátil\n)\n\nObserva que el índice 1 desapareció, pero los demás índices no se reordenaron. Ahora tienes un array con un "hueco": 0, 2, 3. Si intentas recorrerlo con un bucle for usando $i = 0; $i < count($array); $i++, obtendrás un error en el índice 1 porque ya no existe.
¿Cuándo usar unset():
\n- \n
- Para arrays asociativos (claves de texto) — aquí los huecos no importan. \n
- Cuando no te importe el orden de los índices. \n
¿Cuándo NO usarlo:
\n- \n
- Para arrays indexados donde la secuencia (0,1,2...) es importante. \n
- Si planeas serializar el array o convertirlo a JSON — los huecos pueden romper la lógica en el cliente. \n
\n\n
Método #2: array_splice() — eliminar y reindexar
\n\nSi quieres eliminar un elemento de un array en PHP y mantener los índices numéricos secuenciales, usa array_splice(). Esta función no solo elimina, sino que también "compacta" el array automáticamente.
<?php\n$frutas = ['manzana', 'plátano', 'cereza', 'dátil'];\narray_splice($frutas, 1, 1); // desde el índice 1, elimina 1 elemento\nprint_r($frutas);\n?>\n\nResultado:
\n\nArray\n(\n [0] => manzana\n [1] => cereza\n [2] => dátil\n)\n\n¡Los índices vuelven a ser 0, 1, 2! Perfecto. array_splice() acepta tres parámetros:
- \n
- El array (se pasa por referencia — el array original se modifica). \n
- El índice de inicio. \n
- La cantidad de elementos a eliminar (si no se especifica, elimina hasta el final). \n
Bonus: esta función devuelve los elementos eliminados, así que puedes guardarlos:
\n\n<?php\n$eliminado = array_splice($frutas, 1, 1);\necho "Eliminado: " . $eliminado[0]; // plátano\n?>\n\nDesventaja: solo funciona con índices numéricos. Para arrays asociativos, <