Aktueller Standort: Startseite> Neueste Artikel> Array_Diff () und Array_Filter () implementieren gemeinsam eine komplexere Filterlogik

Array_Diff () und Array_Filter () implementieren gemeinsam eine komplexere Filterlogik

M66 2025-05-14

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.

1. Grundbewertung

Array_Filter ()

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 ()

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']

2. Problemszenario

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.

3. praktische Beispiele

Nehmen wir an, wir sammeln eine Menge von URLs, die benutzergerechnet werden, wir brauchen:

  1. Nullwerte oder fehlerhafte Formate entfernen;

  2. 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);

Das Ausgabeergebnis ist wie folgt:

 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:

4. In Kombination mit Array_Diff (), um Blacklisten genau auszuschließen

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);

5. Zusammenfassung

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.