Introdução: por que elementos vazios em arrays são um problema
\n\nTodo desenvolvedor PHP, mais cedo ou mais tarde, enfrenta uma situação em que um array que deveria conter apenas dados úteis acaba cheio de "lixo": strings vazias, valores null, false ou zeros. Isso acontece com frequência ao processar dados de formulários, arquivos CSV, respostas de APIs ou ao trabalhar com entrada do usuário.
Imagine: você recebeu um array de tags de um usuário, e metade delas são strings vazias. Ou você importou dados do Excel e algumas células continham apenas espaços. Se você não limpar esse array, os resultados podem ser desastrosos: consultas incorretas ao banco de dados, lógica de filtragem quebrada, registros extras em relatórios.
\n\nNeste artigo, vamos explorar como remover elementos vazios de um array em PHP da forma mais eficiente possível. Você aprenderá não apenas os métodos básicos, mas também técnicas avançadas: limpeza recursiva, trabalho com arrays multidimensionais e ajustes finos de filtragem. Vamos nessa!
\n\n1. Método básico: array_filter() — sua principal ferramenta
\n\nA maneira mais popular e concisa de remover elementos vazios de um array PHP é a função array_filter(). Por padrão, ela remove todos os elementos que são considerados "falsos" (false) em um contexto booleano:
- \n
""(string vazia) \n null\n false\n 0e"0"\n [](array vazio) \n
<?php\n$data = ['maçã', '', 'banana', null, 'cereja', false, 0];\n$clean = array_filter($data);\nprint_r($clean);\n// Resultado: Array ( [0] => maçã [2] => banana [4] => cereja )\n?>\n\nObserve: as chaves do array são preservadas. Isso pode ser um problema se você precisar de uma numeração sequencial. A solução é envolver o resultado em array_values():
<?php\n$clean = array_values(array_filter($data));\nprint_r($clean);\n// Resultado: Array ( [0] => maçã [1] => banana [2] => cereja )\n?>\n\n1.1. Ajuste fino: como remover apenas strings vazias, mas manter zeros
\n\nE se você precisar remover strings vazias de um array PHP, mas manter números, incluindo o zero? array_filter() sem parâmetros também removerá os zeros. Use uma função de callback:
<?php\n$data = ['maçã', '', 'banana', 0, 'cereja', ' '];\n$clean = array_filter($data, function($value) {\n return $value !== '' && $value !== null;\n});\nprint_r($clean);\n// Resultado: Array ( [0] => maçã [2] => banana [3] => 0 [4] => cereja [5] => )\n?>\n\nMas os espaços ainda estão lá! Para removê-los também, use trim():
<?php\n$clean = array_filter($data, function($value) {\n return trim($value) !== '' && $value !== null;\n});\nprint_r($clean);\n// Resultado: Array ( [0] => maçã [2] => banana [3] => 0 [4] => cereja )\n?>\n\n2. Métodos avançados: array_diff() e array_unique()
\n\nÀs vezes, você precisa remover strings vazias de um array PHP ou valores específicos sem usar um callback. É aí que entra array_diff() — a função de comparação de arrays:
<?php\n$data = ['maçã', '', 'banana', null, 'cereja', false];\n// Cria um array de "valores a remover"\n$remove = ['', null, false];\n$clean = array_diff($data, $remove);\nprint_r($clean);\n// Resultado: Array ( [0] => maçã [2] => banana [4] => cereja )\n?>\n\nA vantagem deste método é a clareza. Você indica explicitamente quais valores considera "vazios". Mas lembre-se: array_diff() não remove elementos por chaves, e sim compara valores.
2.1. Removendo duplicatas de valores vazios
\n\nSe o array tiver várias strings vazias idênticas