filter_var_array()
PHP propose filter_var_array() pour filtrer et valider plusieurs variables à la fois, simplifiant le traitement des formulaires.
Introduction
PHP propose un ensemble de fonctions intégrées pour filtrer et valider les données saisies par l'utilisateur. L'une d'elles est filter_var_array(), qui applique des filtres à plusieurs variables à la fois au lieu d'appeler filter_var() de manière répétée. C'est la fonction de référence pour un traitement propre des formulaires : vous décrivez les règles pour chaque champ dans un seul array, transmettez les données brutes en entrée et obtenez en retour un résultat entièrement validé et assaini.
Ce chapitre couvre la syntaxe, les trois façons de définir des filtres, le comportement de l'indicateur $add_empty, la lecture de la valeur de retour et les erreurs courantes — avec des exemples exécutables.
Syntaxe
La syntaxe de filter_var_array() est la suivante :
La syntaxe PHP de filter_var_array()
filter_var_array ( array $data , mixed $definition [, bool $add_empty = true ] ) : mixed| Paramètre | Signification |
|---|---|
$data | Un array associatif de valeurs d'entrée à filtrer (par exemple $_POST ou $_GET). |
$definition | La méthode de filtrage. Soit une constante de filtre unique appliquée à toutes les valeurs, soit un array qui associe chaque clé à son propre filtre et ses options. |
$add_empty | Si true (valeur par défaut), les clés présentes dans $definition mais absentes de $data sont ajoutées au résultat avec la valeur null. Si false, elles sont ignorées. |
La fonction retourne l'array filtré en cas de succès, ou false en cas d'échec (par exemple, si $data n'est pas un array).
Les trois façons de définir des filtres
Le paramètre $definition est le cœur de cette fonction. Il peut prendre trois formes.
1. Un filtre pour toutes les valeurs — passez une constante de filtre unique :
<?php
$data = ['a' => '1', 'b' => 'not-a-number', 'c' => '42'];
$result = filter_var_array($data, FILTER_VALIDATE_INT);
print_r($result);Sortie — les valeurs qui échouent au filtre deviennent false :
Array
(
[a] => 1
[b] =>
[c] => 42
)2. Une correspondance de filtres par clé — associez chaque clé à sa propre constante de filtre :
<?php
$data = [
'name' => ' John ',
'age' => '30',
'email' => '[email protected]',
];
$definition = [
'name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
'age' => FILTER_VALIDATE_INT,
'email' => FILTER_VALIDATE_EMAIL,
];
print_r(filter_var_array($data, $definition));Array
(
[name] => John
[age] => 30
[email] => [email protected]
)3. Un array par clé avec filtre, indicateurs et options — pour un contrôle précis, associez une clé à un array qui spécifie le filter ainsi que les flags et options :
<?php
$data = ['age' => '150', 'tags' => ['php', 'mysql']];
$definition = [
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 0, 'max_range' => 120],
],
'tags' => [
'filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
'flags' => FILTER_REQUIRE_ARRAY,
],
];
var_dump(filter_var_array($data, $definition));array(2) {
["age"]=>
bool(false)
["tags"]=>
array(2) {
[0]=>
string(3) "php"
[1]=>
string(5) "mysql"
}
}age vaut false car 150 est en dehors de la plage 0–120, et FILTER_REQUIRE_ARRAY indique au filtre de traiter tags comme un array et d'assainir chaque élément.
Utilisation avec les données de formulaire
Dans du code réel, l'array $data est généralement une superglobale telle que $_POST. La même définition que celle vue précédemment applique les règles et stocke les valeurs nettoyées dans $result :
Exemple de filter_var_array() en PHP
<?php
$filters = [
'name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
'age' => FILTER_VALIDATE_INT,
'email' => FILTER_VALIDATE_EMAIL,
];
// $add_empty = false skips keys missing from $_POST instead of adding them as null
$result = filter_var_array($_POST, $filters, false);
if ($result === false || $result['email'] === false) {
// Handle missing or invalid input
echo 'Please correct the form.';
} else {
// $result now holds clean, validated values
}Notez qu'une validation échouée produit false pour cette clé, tandis que la fonction ne retourne false globalement que lorsque $data lui-même est invalide. Vérifiez toujours les deux cas. Pour filtrer $_POST ou $_GET directement depuis le flux d'entrée, consultez la fonction étroitement liée filter_input_array().
Remarque :
FILTER_SANITIZE_STRINGa été supprimé dans PHP 8.0. UtilisezFILTER_SANITIZE_FULL_SPECIAL_CHARSà la place.
Avantages
L'utilisation de filter_var_array() renforce la sécurité et la fiabilité de votre application PHP en traitant plusieurs variables en un seul appel. Valider les données avant tout traitement ultérieur garantit que votre application n'accepte que les données attendues, réduisant ainsi les risques d'injection et de bugs liés à des données malformées. Le fait de conserver les règles dans un array $definition déclaratif sépare également la validation de la logique métier, rendant les scripts plus modulaires et plus faciles à maintenir.
Conclusion
filter_var_array() est la méthode efficace pour valider et assainir un ensemble complet de variables en une seule opération. Choisissez la forme de définition adaptée à vos besoins — un filtre pour tout, une correspondance par clé, ou des arrays d'options par clé — et vérifiez toujours la présence de false pour chaque champ. Pour approfondir le sujet, consultez la vue d'ensemble des filtres PHP et le chapitre sur la validation des formulaires PHP.