Dans PHP, Filter_Var_Array est une fonction très pratique pour filtrer et valider les données dans un tableau. De nombreux développeurs rencontreront une question: Filter_Var_Array peut-il gérer les tableaux multidimensionnels? Cet article répondra en détail à cette question et présentera son utilisation et ses précautions.
La fonction filter_var_array peut appliquer des filtres spécifiés à chaque élément d'un tableau et est souvent utilisé pour traiter les données d'entrée des utilisateurs, telles que $ _get, $ _post ou $ _cookie tableaux. L'utilisation de base est la suivante:
<?php
$data = [
'email' => '[email protected]',
'age' => '25',
];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 65]
],
];
$result = filter_var_array($data, $filters);
var_dump($result);
?>
Le code ci-dessus vérifiera que la boîte aux lettres est valide et vérifiera si l'âge se situe entre 18 et 65 ans.
Par défaut, filter_var_array ne traite que des tableaux unidimensionnels, c'est-à-dire qu'il ne fera que parcourir la première couche du tableau et appliquer des règles de filtrage pour chaque paire de valeurs clés. Pour les tableaux multidimensionnels, il ne traite pas les tableaux de couche interne récursivement.
Par exemple:
<?php
$data = [
'user' => [
'email' => '[email protected]',
'age' => '25',
],
'status' => 'active'
];
$filters = [
'user' => FILTER_DEFAULT, // Voici"user"Correspondant à un tableau,Par défaut, les éléments internes ne sont pas filtrés
'status' => FILTER_SANITIZE_STRING,
];
$result = filter_var_array($data, $filters);
var_dump($result);
?>
Dans le résultat, le tableau correspondant à l'utilisateur sera renvoyé tel quel et ne sera pas filtré.
Si vous devez filtrer les tableaux multidimensionnels, Filter_Var_Array lui-même ne peut pas prendre directement en charge les opérations récursives. Une pratique courante consiste à écrire une fonction récursive, à parcourir un tableau multidimensionnel, à appeler filter_var_array pour chaque couche ou à utiliser Filter_Var .
Exemple de code:
<?php
function recursive_filter_var_array(array $data, array $filters) {
$result = [];
foreach ($filters as $key => $filter) {
if (is_array($filter) && isset($data[$key]) && is_array($data[$key])) {
// Traiter récursivement des tableaux multidimensionnels
$result[$key] = recursive_filter_var_array($data[$key], $filter);
} elseif (isset($data[$key])) {
// Filtrez des éléments individuels
if (is_array($filter)) {
$result[$key] = filter_var($data[$key], $filter['filter'], $filter['options'] ?? []);
} else {
$result[$key] = filter_var($data[$key], $filter);
}
}
}
return $result;
}
// Exemples de données et de règles de filtrage
$data = [
'user' => [
'email' => '[email protected]',
'age' => '30',
],
'status' => 'active<script>',
];
$filters = [
'user' => [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 65],
],
],
'status' => FILTER_SANITIZE_STRING,
];
$result = recursive_filter_var_array($data, $filters);
var_dump($result);
?>
Grâce à cette fonction récursive, vous pouvez traiter avec flexible les tableaux multidimensionnels et filtrer les données hiérarchiquement.
Les règles de filtrage et la structure du tableau doivent correspondre à <br> La structure du tableau des règles de filtrage doit correspondre à la structure du tableau filtré, sinon elle entraînera une défaillance du filtrage ou une perte de données.
filter_var_array ne prend pas en charge la récursivité <br> Par défaut, seuls les tableaux unidimensionnels sont traités et vous devez écrire vous-même des fonctions récursives pour implémenter le filtrage multidimensionnel.
Sélection de filtre raisonnable <br> Sélectionnez le filtre approprié en fonction du type de données, tel que filter_validate_email pour les boîtes aux lettres, filter_validate_int pour les entiers, et filter_sanitize_string pour les chaînes, etc.
Configuration de l'option <br> Les options peuvent être définies pour les filtres, tels que les limites de plage, les valeurs par défaut, etc., pour améliorer la flexibilité et la sécurité du filtrage.
Filter_Var_Array est un puissant outil de filtrage de tableau dans PHP, mais il ne prend en charge que des tableaux unidimensionnels. Si vous souhaitez gérer des tableaux multidimensionnels, il est recommandé d'implémenter vous-même la fonction de filtrage récursive. En concevant rationnellement les règles et structures de filtrage, la sécurité et l'efficacité des données peuvent être effectivement garanties.
Pour plus de conseils et d'exemples liés à PHP, vous pouvez visiter https://gitbox.net/php/filter_var_array pour plus de détails.