Bei der täglichen Entwicklung ist die Datenfilterung ein sehr häufiger Vorgang, insbesondere wenn die Eingabe von Benutzern, Datenbank Ergebnisse oder externe API -Daten zurückgibt, müssen wir häufig die Daten "ausschließen", z. Zu diesem Zeitpunkt sind die beiden PHP -nativen Funktionen Array_Diff () und in_array () nützlich.
Array_Diff () wird verwendet, um die Werte eines Arrays zu vergleichen, wobei die Werte im ersten Array jedoch nicht in anderen Arrays zurückgegeben werden. Zum Beispiel:
$allUsers = ['alice', 'bob', 'charlie', 'david'];
$blacklist = ['bob', 'david'];
$filteredUsers = array_diff($allUsers, $blacklist);
print_r($filteredUsers);
// Ausgabe: ['alice', 'charlie']
In diesem Beispiel sind Bob und David Blacklist -Mitglieder, und wir schließen sie aus den Originaldaten über Array_Diff () aus.
In_array () wird verwendet, um festzustellen, ob in einem Array ein Wert vorhanden ist. Diese Funktion ist sehr nützlich, um einzelne Urteile oder als logische Bedingung zu fällen.
Wenn wir beispielsweise bestimmte Elemente beim Durchqueren der Daten bedingt ausschließen müssen, können wir sie so schreiben:
$exclusions = ['spam', 'banned'];
$itemType = 'spam';
if (!in_array($itemType, $exclusions)) {
echo "Ermöglichen Sie die Bearbeitung dieses Elements";
} else {
echo "Dieser Artikel wurde ausgeschlossen";
}
Schauen wir uns nun ein praktischeres Beispiel an, wie man Array_Diff () und In_array () kombiniert, um einen Ausschluss von mehreren Konditionen zu erzielen und die Datenverarbeitungseffizienz zu verbessern.
Angenommen, wir haben eine Reihe von Artikeldaten, und die Felder enthalten Autor, Status und Tags. Wir brauchen:
Erpressungsautoren ausschließen
Artikel mit dem Entwurfsstatus ausschließen
Artikel mit "sensiblen" Schlüsselwörtern im Tag ausschließen
Wir können das tun:
$articles = [
['title' => 'Artikel1', 'author' => 'tom', 'status' => 'published', 'tags' => ['php', 'web']],
['title' => 'Artikel2', 'author' => 'jack', 'status' => 'draft', 'tags' => ['php', 'empfindlich']],
['title' => 'Artikel3', 'author' => 'lucy', 'status' => 'published', 'tags' => ['laravel']],
['title' => 'Artikel4', 'author' => 'bob', 'status' => 'published', 'tags' => ['empfindlich']],
];
$blacklistedAuthors = ['bob', 'jack'];
$excludedStatus = ['draft'];
$sensitiveTags = ['empfindlich'];
$filtered = array_filter($articles, function ($article) use ($blacklistedAuthors, $excludedStatus, $sensitiveTags) {
// Blacklist -Autoren ausschließen
if (in_array($article['author'], $blacklistedAuthors)) {
return false;
}
// Spezifischen Status ausschließen
if (in_array($article['status'], $excludedStatus)) {
return false;
}
// 排除含有empfindlich标签的Artikel
foreach ($article['tags'] as $tag) {
if (in_array($tag, $sensitiveTags)) {
return false;
}
}
return true;
});
print_r($filtered);
Die Ausgabe wird sein:
Array
(
[0] => Array
(
[title] => Artikel1
[author] => tom
[status] => published
[tags] => Array
(
[0] => php
[1] => web
)
)
[2] => Array
(
[title] => Artikel3
[author] => lucy
[status] => published
[tags] => Array
(
[0] => laravel
)
)
)
Wenn das Datenvolumen groß ist, versuchen Sie, array_diff () gleichzeitig unnötige Inhalte herauszufiltern, und vermeiden Sie häufige Aufrufe an in_array () innerhalb der Schleife.
Die Anpassung der Array-Struktur von Ausschlüssen in eine Hash-Tabelle (d. H. Das Formular für Schlüsselwertpaare) kann die Suchgeschwindigkeit weiter verbessern.
Zum Beispiel:
$blacklistedAuthors = array_flip(['bob', 'jack']);
if (isset($blacklistedAuthors[$article['author']])) {
return false;
}
Die Leistung von isset () ist normalerweise besser als in_array () , insbesondere in hohen Parallelitätsszenarien.
Indem wir Array_Diff () und In_array () vernünftigerweise kombinieren, können wir die Datenausschlusslogik unter mehreren Bedingungen schnell implementieren, um die Lesbarkeit und Ausführungseffizienz des Programms zu verbessern. In der tatsächlichen Entwicklung wird Ihr Code effizienter und stabiler.