Menu

Eliminar un elemento de un array en PHP: unset, array_splice

unset($array[$key]) elimina un elemento por clave, array_splice elimina por posición y renumera, y array_diff elimina por valor. Aprende cada una, cómo reindexar después y la trampa de array_search que borra el elemento equivocado.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Para eliminar un elemento de un array de PHP por su clave, usa unset($array[$key]). El elemento desaparece, las demás claves se quedan exactamente como estaban, y hacer unset de una clave que no existe no es un error.

Mira el segundo resultado: ahora las claves son 0, 2, 3. unset nunca renumera.

Reindexar el array después de unset

Una lista con un hueco en sus claves da problemas más adelante: un bucle for ($i = 0; ...) se encuentra con el índice que falta, y json_encode escribe un objeto JSON en lugar de un array. array_values() te devuelve unas claves limpias.

Eliminar por posición con array_splice

array_splice($array, $offset, $length) elimina $length elementos a partir de la posición $offset, renumera las claves y devuelve lo que eliminó. Un desplazamiento negativo cuenta desde el final. En la misma llamada también puede insertar elementos de reemplazo.

array_splice trabaja con posiciones, no con claves: en un array asociativo elimina según el lugar que ocupa en el orden, y conserva las claves de texto. La página de array_slice la compara con array_slice, que copia una parte sin cambiar el original.

Eliminar un elemento por valor

array_diff($array, [$value]) devuelve el array sin todos los elementos iguales a $value, conservando las claves del resto. Para eliminar solo la primera coincidencia, busca su clave con array_search y elimínala con unset.

array_diff compara los valores como cadenas, así que array_diff([1, "1", 2], [1]) elimina tanto el entero como la cadena. Cuando la condición es algo más que "igual a este valor", usa array_filter con un callback.

Eliminar el primer o el último elemento

array_shift() elimina el primer elemento y array_pop() el último. Las dos devuelven el elemento eliminado, lo que las hace prácticas para colas y pilas.

array_shift renumera las claves numéricas desde 0. array_pop no lo necesita, porque el hueco queda al final.

Eliminar varias claves a la vez

unset acepta varios elementos en una llamada. Para eliminar una lista de claves que tienes en un array, inviértela con array_flip() para que los nombres se conviertan en claves, y pásala a array_diff_key().

Error frecuente: unset con array_search cuando el valor no está

array_search devuelve false cuando no encuentra nada, y false usado como clave de array se convierte en 0. Así que esta línea borra el primer elemento siempre que el valor no esté en el array:

Guarda siempre el resultado de array_search y compáralo con !== false antes de usarlo como clave. Un simple if ($key) tampoco basta: una coincidencia en el índice 0 también es falsy.

Preguntas frecuentes

¿Cómo elimino un elemento de un array por valor en PHP?

Para eliminar todas las apariciones, usa array_diff($arr, ['value']). Para eliminar solo la primera, busca su clave y elimínala con unset, comprobando que se encontró: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.

¿Cómo reindexo un array después de unset?

Envuélvelo en array_values(): $arr = array_values($arr); renumera las claves desde 0. Otra opción es eliminar el elemento con array_splice($arr, $index, 1), que renumera por ti.

¿Cómo elimino el primer o el último elemento de un array?

array_shift($arr) elimina y devuelve el primer elemento, y renumera las claves numéricas. array_pop($arr) elimina y devuelve el último elemento.

¿Puedo hacer unset de un elemento dentro de un bucle foreach?

Sí. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } es seguro, porque foreach recorre una copia del array mientras tú cambias el original. Las claves conservan sus huecos, así que llama después a array_values() si necesitas una lista.

¿Hacer unset de una clave que no existe da un error?

No. unset($arr['missing']) no hace nada y no genera ningún warning, así que no necesitas comprobar antes con isset.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR