Introduction : pourquoi les éléments vides dans un tableau sont un casse-tête
\n\nTout développeur PHP rencontre tôt ou tard une situation où un tableau censé contenir uniquement des données utiles se retrouve rempli de "déchets" : chaînes vides, valeurs null, false ou zéros. Cela arrive fréquemment lors du traitement de données issues de formulaires, de fichiers CSV, de réponses API ou de saisies utilisateur.
Imaginez : vous recevez un tableau de tags d'un utilisateur, et la moitié d'entre eux sont des chaînes vides. Ou vous importez des données depuis Excel, et certaines cellules ne contiennent qu'un espace. Si vous ne nettoyez pas ce tableau, les résultats peuvent être désastreux : requêtes incorrectes en base de données, logique de filtrage cassée, enregistrements superflus dans les rapports.
\n\nDans cet article, nous allons voir comment supprimer les éléments vides d'un tableau en PHP de la manière la plus efficace possible. Vous découvrirez non seulement les méthodes de base, mais aussi des techniques avancées : nettoyage récursif, gestion des tableaux multidimensionnels et réglages fins du filtrage. C'est parti !
\n\n1. Méthode de base : array_filter() — votre outil principal
\n\nLa façon la plus populaire et concise de supprimer les éléments vides d'un tableau PHP est la fonction array_filter(). Par défaut, elle supprime tous les éléments considérés comme "faux" (false) dans un contexte booléen :
- \n
""(chaîne vide) \n null\n false\n 0et"0"\n [](tableau vide) \n
<?php\n$data = ['pomme', '', 'banane', null, 'cerise', false, 0];\n$clean = array_filter($data);\nprint_r($clean);\n// Résultat : Array ( [0] => pomme [2] => banane [4] => cerise )\n?>\n\nNotez que les clés du tableau sont conservées. Cela peut poser problème si vous avez besoin d'une numérotation séquentielle. La solution consiste à encapsuler le résultat dans array_values() :
<?php\n$clean = array_values(array_filter($data));\nprint_r($clean);\n// Résultat : Array ( [0] => pomme [1] => banane [2] => cerise )\n?>\n\n1.1. Réglage fin : supprimer uniquement les chaînes vides tout en conservant les zéros
\n\nQue faire si vous devez supprimer les chaînes vides d'un tableau PHP mais conserver les nombres, y compris zéro ? array_filter() sans paramètres supprimera aussi les zéros. Utilisons une fonction de callback :
<?php\n$data = ['pomme', '', 'banane', 0, 'cerise', ' '];\n$clean = array_filter($data, function($value) {\n return $value !== '' && $value !== null;\n});\nprint_r($clean);\n// Résultat : Array ( [0] => pomme [2] => banane [3] => 0 [4] => cerise [5] => )\n?>\n\nMais les espaces sont toujours là ! Pour les supprimer aussi, utilisez trim() :
<?php\n$clean = array_filter($data, function($value) {\n return trim($value) !== '' && $value !== null;\n});\nprint_r($clean);\n// Résultat : Array ( [0] => pomme [2] => banane [3] => 0 [4] => cerise )\n?>\n\n2. Méthodes avancées : array_diff() et array_unique()
\n\nParfois, vous devez supprimer les chaînes vides d'un tableau PHP ou des valeurs spécifiques sans utiliser de callback. array_diff(), la fonction de comparaison de tableaux, vient à la rescousse :
<?php\n$data = ['pomme', '', 'banane', null, 'cerise', false];\n// Création d'un tableau de "valeurs à exclure"\n$remove = ['', null, false];\n$clean = array_diff($data, $remove);\nprint_r($clean);\n// Résultat : Array ( [0] => pomme [2] => banane [4] => cerise )\n?>\n\nL'avantage de cette méthode est sa clarté. Vous indiquez explicitement les valeurs considérées comme "vides". Mais n'oubliez pas : array_diff() ne supprime pas les éléments par leurs clés, mais compare les valeurs.
2.1. Suppression des doublons de valeurs vides
\n\nSi le tableau contient plusieurs valeurs vides identiques,