Introducción: por qué los elementos vacíos en un array son un dolor de cabeza
\n\nTodo desarrollador PHP, tarde o temprano, se enfrenta a la situación en la que un array que debería contener solo datos útiles termina lleno de "basura": cadenas vacías, valores null, false o ceros. Esto ocurre especialmente al procesar datos de formularios, archivos CSV, respuestas de API o al trabajar con entrada de usuario.
Imagina: recibes un array de etiquetas de un usuario, y la mitad son cadenas vacías. O importaste datos de Excel y algunas celdas solo contienen un espacio. Si no limpias ese array, los resultados pueden ser desastrosos: consultas incorrectas a la base de datos, lógica de filtrado rota, registros innecesarios en informes.
\n\nEn este artículo, analizaremos cómo eliminar elementos vacíos de un array en PHP de la manera más eficiente. No solo aprenderás los métodos básicos, sino también técnicas avanzadas: limpieza recursiva, trabajo con arrays multidimensionales y ajustes finos de filtrado. ¡Allá vamos!
\n\n1. Método básico: array_filter() — tu herramienta principal
\n\nLa forma más popular y concisa de eliminar elementos vacíos de un array PHP es la función array_filter(). Por defecto, elimina todos los elementos que en un contexto lógico se consideran "falsos" (false):
- \n
""(cadena vacía) \n null\n false\n 0y"0"\n [](array vacío) \n
<?php\n$data = ['manzana', '', 'plátano', null, 'cereza', false, 0];\n$clean = array_filter($data);\nprint_r($clean);\n// Resultado: Array ( [0] => manzana [2] => plátano [4] => cereza )\n?>\n\nTen en cuenta: las claves del array se conservan. Esto puede ser un problema si necesitas una numeración secuencial. La solución es envolver el resultado en array_values():
<?php\n$clean = array_values(array_filter($data));\nprint_r($clean);\n// Resultado: Array ( [0] => manzana [1] => plátano [2] => cereza )\n?>\n\n1.1. Ajuste fino: cómo eliminar solo cadenas vacías pero conservar los ceros
\n\n¿Qué pasa si necesitas eliminar cadenas vacías de un array PHP pero conservar los números, incluido el cero? array_filter() sin parámetros también eliminará los ceros. Usa una función callback:
<?php\n$data = ['manzana', '', 'plátano', 0, 'cereza', ' '];\n$clean = array_filter($data, function($value) {\n return $value !== '' && $value !== null;\n});\nprint_r($clean);\n// Resultado: Array ( [0] => manzana [2] => plátano [3] => 0 [4] => cereza [5] => )\n?>\n\n¡Pero los espacios aún están ahí! Para eliminarlos también, usa trim():
<?php\n$clean = array_filter($data, function($value) {\n return trim($value) !== '' && $value !== null;\n});\nprint_r($clean);\n// Resultado: Array ( [0] => manzana [2] => plátano [3] => 0 [4] => cereza )\n?>\n\n2. Métodos avanzados: array_diff() y array_unique()
\n\nA veces necesitas eliminar cadenas vacías de un array PHP o valores específicos sin recurrir a un callback. Aquí entra en juego array_diff(), la función de comparación de arrays:
<?php\n$data = ['manzana', '', 'plátano', null, 'cereza', false];\n// Creamos un array de "valores a eliminar"\n$remove = ['', null, false];\n$clean = array_diff($data, $remove);\nprint_r($clean);\n// Resultado: Array ( [0] => manzana [2] => plátano [4] => cereza )\n?>\n\nLa ventaja de este método es su claridad. Indicas explícitamente qué valores consideras "vacíos". Pero no olvides: array_diff() no elimina elementos por clave, sino que compara valores.
2.1. Eliminación de duplicados de valores vacíos
\n\nSi el array tiene varios valores vacíos idénticos