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.
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 () .
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";
}
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:
Exclure les auteurs chantage
Exclure les articles avec un projet de statut
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
)
)
)
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.
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.