Position actuelle: Accueil> Derniers articles> Comment implémenter une logique de filtrage de tableau plus complexe en combinant les fonctions array_diff () et array_filter ()?

Comment implémenter une logique de filtrage de tableau plus complexe en combinant les fonctions array_diff () et array_filter ()?

M66 2025-05-14

Dans le développement quotidien de PHP, le filtrage des tableaux est une tâche très courante. Qu'il s'agisse de nettoyer des données non valides, de supprimer des éléments spécifiques ou d'effectuer un filtrage de logique métier, nous pouvons utiliser des fonctions telles que Array_Filter () ou Array_Diff () . Les utiliser seuls est déjà puissant, mais lorsqu'ils sont combinés, nous pouvons implémenter des opérations de tableau plus complexes et flexibles.

Cet article utilisera un exemple pour expliquer comment combiner array_diff () et array_filter () pour implémenter la logique de filtrage du tableau complexe.

1. Revue de base

array_filter ()

array_filter () est généralement utilisé pour filtrer les valeurs dans un tableau qui ne répond pas aux critères en fonction d'une fonction de rappel:

 $numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, function($n) {
    return $n % 2 === 0;
});
// $even = [1 => 2, 3 => 4]

array_diff ()

array_diff () est utilisé pour renvoyer toutes les valeurs dans un tableau qui ne sont pas dans d'autres tableaux:

 $all = ['apple', 'banana', 'cherry'];
$remove = ['banana'];
$result = array_diff($all, $remove);
// $result = [0 => 'apple', 2 => 'cherry']

2. Scénario de problème

Supposons que vous ayez un tableau de données contenant plusieurs entrées utilisateur, qui contiennent certaines valeurs que vous souhaitez exclure (comme les listes noires, les éléments existants, les données non valides, etc.). Vous espérez:

  • Utilisez array_filter () pour filtrer les éléments non format ou mal formatés;

  • Utilisez ensuite Array_Diff () pour supprimer ces valeurs dans la liste noire;

  • Enfin, un tableau propre qui peut être utilisé pour un traitement ultérieur.

3. Exemples pratiques

Supposons que nous recueillions un lot d'URL soumis à l'utilisateur, nous avons besoin:

  1. Supprimer des valeurs nulles ou des formats erronés;

  2. Noms de domaine exclus de la liste noire.

 $userUrls = [
    'https://m66.net/article/123',
    'http://example.com/test',
    '',
    'not_a_url',
    'https://m66.net/login',
    'https://blacklist.com/malicious',
];

$blacklistedDomains = ['blacklist.com'];

// premier pas:utiliser array_filter() Autorisation non valide URL
$validUrls = array_filter($userUrls, function($url) {
    return filter_var($url, FILTER_VALIDATE_URL);
});

// Étape 2:L'extraction est légale URL Nom de domaine,Et filtrez le nom de domaine de la liste noire
$filteredUrls = array_filter($validUrls, function($url) use ($blacklistedDomains) {
    $host = parse_url($url, PHP_URL_HOST);
    return !in_array($host, $blacklistedDomains);
});

// $filteredUrls Contient maintenant légal et non sur liste noire URL
print_r($filteredUrls);

Le résultat de sortie est le suivant:

 Array
(
    [0] => https://m66.net/article/123
    [1] => http://example.com/test
    [4] => https://m66.net/login
)

Notez que nous avons réellement utilisé Array_Filter () deux fois ici, et nous pouvons également introduire Array_Diff () au besoin pour gérer les différences entre les listes de noms de domaine, comme indiqué ci-dessous:

4. Combiné avec array_diff () pour exclure avec précision les listes noires

Nous pouvons d'abord extraire tous les noms de domaine de l'URL, puis utiliser array_diff () pour exclure les noms de domaine de liste noire:

 $domains = array_map(function($url) {
    return parse_url($url, PHP_URL_HOST);
}, $validUrls);

$allowedDomains = array_diff($domains, $blacklistedDomains);

// Filtrer à nouveau URL,Conserver uniquement les effets personnels allowedDomains de
$finalUrls = array_filter($validUrls, function($url) use ($allowedDomains) {
    $host = parse_url($url, PHP_URL_HOST);
    return in_array($host, $allowedDomains);
});

print_r($finalUrls);

5. Résumé

En combinant Array_Filter () et Array_Diff () , nous pouvons gérer de manière très flexible diverses logiques de filtrage complexe. En développement réel:

  • array_filter () est plus adapté pour vérifier les éléments de tableau un par un selon les conditions;

  • Array_Diff () convient plus à l'exclusion des éléments ou des listes noires non valides connues;

  • La combinaison des deux peut non seulement vérifier le contenu de l'élément, mais aussi réaliser le filtrage de set.

La maîtrise flexible La combinaison de ces fonctions améliorera considérablement l'efficacité et la lisibilité du code de vos réseaux de données en PHP.