Position actuelle: Accueil> Derniers articles> Utilisez array_diff () et in_array () pour réaliser l'exclusion multi-conditions

Utilisez array_diff () et in_array () pour réaliser l'exclusion multi-conditions

M66 2025-06-06

Dans le développement quotidien, le filtrage des données est une opération très courante, en particulier lors du traitement de la saisie des utilisateurs, de la base de données renvoie les résultats ou des données API externes, nous devons souvent "exclure" les données, telles que: exclure des utilisateurs sur liste noire, des produits non qualifiés ou des enregistrements traités à partir d'un ensemble de données. À l'heure actuelle, les deux natifs PHP fonctionnent array_diff () et in_array () sont utiles.

1. Utilisation de base de Array_Diff ()

array_diff () est utilisé pour comparer les valeurs d'un tableau, renvoyant les valeurs dans le premier tableau mais pas dans d'autres tableaux. Par exemple:

 $allUsers = ['alice', 'bob', 'charlie', 'david'];
$blacklist = ['bob', 'david'];

$filteredUsers = array_diff($allUsers, $blacklist);

print_r($filteredUsers);
// Sortir: ['alice', 'charlie']

Dans cet exemple, Bob et David sont des membres de la liste noire, et nous les excluons des données originales via array_diff () .

2. Vérification auxiliaire de IN_Array ()

in_Array () est utilisé pour déterminer s'il existe une valeur dans un tableau. Cette fonction est très utile pour rendre des jugements uniques ou comme condition logique.

Par exemple, si nous devons exclure conditionnellement certains éléments lors de la traversée des données, nous pouvons l'écrire comme ceci:

 $exclusions = ['spam', 'banned'];

$itemType = 'spam';

if (!in_array($itemType, $exclusions)) {
    echo "Autoriser le traitement de cet article";
} else {
    echo "Cet article a été exclu";
}

3. Utilisation de la combinaison: stratégie d'optimisation de l'exclusion multi-conditions

Voyons maintenant un exemple plus pratique, comment combiner array_diff () et in_array () pour réaliser l'exclusion multi-conditionnement et améliorer l'efficacité de traitement des données.

Supposons que nous ayons un ensemble de données d'article et que les champs contiennent l'auteur, le statut et les balises, nous avons besoin:

  1. Exclure les auteurs chantage

  2. Exclure les articles avec un projet de statut

  3. Exclure des articles avec des mots clés "sensibles" dans la balise

Nous pouvons faire ceci:

 $articles = [
    ['title' => 'article1', 'author' => 'tom', 'status' => 'published', 'tags' => ['php', 'web']],
    ['title' => 'article2', 'author' => 'jack', 'status' => 'draft', 'tags' => ['php', 'sensible']],
    ['title' => 'article3', 'author' => 'lucy', 'status' => 'published', 'tags' => ['laravel']],
    ['title' => 'article4', 'author' => 'bob', 'status' => 'published', 'tags' => ['sensible']],
];

$blacklistedAuthors = ['bob', 'jack'];
$excludedStatus = ['draft'];
$sensitiveTags = ['sensible'];

$filtered = array_filter($articles, function ($article) use ($blacklistedAuthors, $excludedStatus, $sensitiveTags) {
    // Exclure les auteurs de la liste noire
    if (in_array($article['author'], $blacklistedAuthors)) {
        return false;
    }

    // Exclure un statut spécifique
    if (in_array($article['status'], $excludedStatus)) {
        return false;
    }

    // 排除含有sensible标签的article
    foreach ($article['tags'] as $tag) {
        if (in_array($tag, $sensitiveTags)) {
            return false;
        }
    }

    return true;
});

print_r($filtered);

La sortie sera:

 Array
(
    [0] => Array
        (
            [title] => article1
            [author] => tom
            [status] => published
            [tags] => Array
                (
                    [0] => php
                    [1] => web
                )
        )

    [2] => Array
        (
            [title] => article3
            [author] => lucy
            [status] => published
            [tags] => Array
                (
                    [0] => laravel
                )
        )
)

4. Suggestions d'optimisation des performances

  • Lorsque le volume de données est important, essayez d'utiliser array_diff () pour filtrer le contenu inutile en même temps et éviter les appels fréquents vers in_array () dans la boucle.

  • L'ajustement de la structure du tableau des exclusions à une table de hachage (c'est-à-dire le formulaire de paire de valeurs clés) peut encore améliorer la vitesse de recherche.

Par exemple:

 $blacklistedAuthors = array_flip(['bob', 'jack']);

if (isset($blacklistedAuthors[$article['author']])) {
    return false;
}

Les performances d' ISSet () sont généralement meilleures que dans_array () , en particulier dans les scénarios de concurrence élevés.

5. Résumé

En combinant raisonnablement array_diff () et in_array () , nous pouvons rapidement implémenter la logique d'exclusion des données dans plusieurs conditions pour améliorer la lisibilité et l'efficacité d'exécution du programme. Dans le développement réel, l'organisation rationnelle des structures de données et des jugements logiques rendra votre code plus efficace et stable.