Como remover elementos vazios de um array em PHP: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que elementos vazios em arrays são um problema

\n\n

Todo 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.

\n\n

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\n

Neste 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\n

1. Método básico: array_filter() — sua principal ferramenta

\n\n

A 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\n
    \n
  • "" (string vazia)
  • \n
  • null
  • \n
  • false
  • \n
  • 0 e "0"
  • \n
  • [] (array vazio)
  • \n
\n\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\n

Observe: 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():

\n\n
<?php\n$clean = array_values(array_filter($data));\nprint_r($clean);\n// Resultado: Array ( [0] => maçã [1] => banana [2] => cereja )\n?>
\n\n

1.1. Ajuste fino: como remover apenas strings vazias, mas manter zeros

\n\n

E 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:

\n\n
<?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\n

Mas os espaços ainda estão lá! Para removê-los também, use trim():

\n\n
<?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\n

2. 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:

\n\n
<?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\n

A 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.

\n\n

2.1. Removendo duplicatas de valores vazios

\n\n

Se o array tiver várias strings vazias idênticas

Blogs

Book Recommendations