Bei der täglichen PHP -Entwicklung ist das Filterarrays eine sehr häufige Aufgabe. Unabhängig davon, ob es sich um ungültige Daten, die Entfernung bestimmter Elemente oder die Durchführung von Geschäftslogikfilterung, können wir Funktionen wie Array_Filter () oder Array_Diff () verwenden. Die Verwendung allein ist bereits leistungsstark, aber wenn sie kombiniert werden, können wir komplexere und flexiblere Array -Operationen implementieren.
In diesem Artikel wird ein Beispiel verwendet, um zu erklären, wie Sie array_diff () und array_filter () kombinieren können, um eine komplexe Array -Filterlogik zu implementieren.
Array_Filter () wird normalerweise verwendet, um Werte in einem Array zu filtern, das die Kriterien basierend auf einer Rückruffunktion nicht erfüllt:
$numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, function($n) {
return $n % 2 === 0;
});
// $even = [1 => 2, 3 => 4]
Array_Diff () wird verwendet, um alle Werte in einem Array zurückzugeben, die sich nicht in anderen Arrays befinden:
$all = ['apple', 'banana', 'cherry'];
$remove = ['banana'];
$result = array_diff($all, $remove);
// $result = [0 => 'apple', 2 => 'cherry']
Angenommen, Sie haben eine Reihe von Daten, die mehrere Benutzereingaben enthalten, die einige Werte enthalten, die Sie ausschließen möchten (z. B. Blacklists, vorhandene Elemente, ungültige Daten usw.). Sie hoffen:
Verwenden Sie Array_Filter () , um ungültige oder falsch formatierte Elemente herauszufiltern.
Verwenden Sie dann Array_Diff (), um diese Werte in der Blacklist zu entfernen.
Schließlich ein sauberes Array, das zur weiteren Verarbeitung verwendet werden kann.
Nehmen wir an, wir sammeln eine Menge von URLs, die benutzergerechnet werden, wir brauchen:
Nullwerte oder fehlerhafte Formate entfernen;
Ausgeschlossene Domainnamen aus der Blacklist.
$userUrls = [
'https://m66.net/article/123',
'http://example.com/test',
'',
'not_a_url',
'https://m66.net/login',
'https://blacklist.com/malicious',
];
$blacklistedDomains = ['blacklist.com'];
// Erster Schritt:verwenden array_filter() Ungültige Freigabe URL
$validUrls = array_filter($userUrls, function($url) {
return filter_var($url, FILTER_VALIDATE_URL);
});
// Schritt 2:Extraktion ist legal URL Domain -Name,Und filtern Sie den Domainnamen Blacklist heraus
$filteredUrls = array_filter($validUrls, function($url) use ($blacklistedDomains) {
$host = parse_url($url, PHP_URL_HOST);
return !in_array($host, $blacklistedDomains);
});
// $filteredUrls Enthält jetzt legal und nicht auf die schwarze Liste URL
print_r($filteredUrls);
Array
(
[0] => https://m66.net/article/123
[1] => http://example.com/test
[4] => https://m66.net/login
)
Beachten Sie, dass wir hier tatsächlich Array_filter () zweimal verwendet haben und wir auch Array_Diff () einführen können, um die Unterschiede zwischen den Domänennamenlisten zu verarbeiten, wie unten gezeigt:
Wir können zuerst alle Domainnamen aus der URL extrahieren und dann Array_Diff () verwenden, um Blacklist -Domain -Namen auszuschließen:
$domains = array_map(function($url) {
return parse_url($url, PHP_URL_HOST);
}, $validUrls);
$allowedDomains = array_diff($domains, $blacklistedDomains);
// Wieder filtern URL,Nur Habseligkeiten behalten allowedDomains von
$finalUrls = array_filter($validUrls, function($url) use ($allowedDomains) {
$host = parse_url($url, PHP_URL_HOST);
return in_array($host, $allowedDomains);
});
print_r($finalUrls);
Durch Kombinieren von Array_Filter () und Array_Diff () können wir verschiedene komplexe Array -Filterlogik sehr flexibel verarbeiten. In der tatsächlichen Entwicklung:
Array_Filter () eignet sich besser für die Überprüfung von Array -Elementen nacheinander gemäß den Bedingungen.
Array_Diff () eignet sich besser für den Ausschluss von bekannten ungültigen Elementen oder Blacklists.
Das Kombinieren der beiden kann nicht nur den Elementinhalt überprüfen, sondern auch die festgelegte Filterung erkennen.
Flexible Beherrschung der Kombination dieser Funktionen verbessert die Effizienz und die Code -Lesbarkeit Ihrer Datenarrays in PHP erheblich.