In PHP ist Array_udiff () eine sehr leistungsstarke Funktion, mit der wir eine benutzerdefinierte Vergleichsfunktion verwenden können, um die Unterschiede zwischen zwei oder mehr Arrays zu vergleichen. Dies bedeutet, dass wir die "gleiche" oder "ungleiche" Urteilslogik flexibel definieren können, die auf bestimmten Geschäftsbedürfnissen basieren, anstatt sich auf einfache Werte oder Schlüsselvergleiche zu verlassen.
array_udiff(array $array1, array $array2, callable $value_compare_func): array
$ array1 : Das erste Array, das verglichen wird.
$ array2 : Das zweite Array, das mit dem ersten Array verglichen werden muss.
$ value_compare_func : Eine benutzerdefinierte Vergleichsfunktion.
Die Funktion gibt den Wert in $ array1 zurück, jedoch nicht in $ array2 und wird mit einer benutzerdefinierten Funktion verglichen.
Angenommen, wir haben zwei Benutzerlisten, nämlich Benutzer, die sich heute angemeldet haben, und Benutzer, die im letzten Monat aktiv waren. Jede Benutzerinformation ist ein Array mit ID und E -Mail . Wir möchten herausfinden, welche "neuen Benutzer" zu den heute angemeldeten Benutzern gehören, d. H. Diejenigen, die in der Vergangenheit noch nie aktiv waren.
// Benutzer haben sich heute angemeldet
$todayUsers = [
['id' => 101, 'email' => 'alice@m66.net'],
['id' => 102, 'email' => 'bob@m66.net'],
['id' => 103, 'email' => 'carol@m66.net'],
];
// Aktive Benutzer im letzten Monat
$pastActiveUsers = [
['id' => 102, 'email' => 'bob@m66.net'],
['id' => 104, 'email' => 'dan@m66.net'],
];
// Benutzerdefinierte Vergleichsfunktionen:passieren email Stellen Sie fest, ob der Benutzer gleich ist
function compareUsersByEmail($a, $b) {
return strcmp($a['email'], $b['email']);
}
// Finde es heraus“Neue Benutzer”
$newUsers = array_udiff($todayUsers, $pastActiveUsers, 'compareUsersByEmail');
// Ausgangsergebnis
echo "Neue Benutzer列表:\n";
foreach ($newUsers as $user) {
echo "- {$user['email']} (ID: {$user['id']})\n";
}
Neue Benutzer列表:
- alice@m66.net (ID: 101)
- carol@m66.net (ID: 103)
Die Vergleichsfunktion in Array_udiff () muss eine Ganzzahl zurückgeben :
Negative Zahl: bedeutet, dass der erste Parameter kleiner als der zweite ist;
0: bedeutet, dass zwei Werte gleich sind;
Positive Zahl: bedeutet, dass der erste Parameter größer ist als der zweite.
Stellen Sie in der benutzerdefinierten Vergleichsfunktion ein klares Verständnis der Struktur von Array -Elementen und vermeiden Sie den Zugriff auf undefinierte Schlüssel.
Wenn wir nicht nur basierend auf E -Mails, sondern auch auf der ID vergleichen möchten, können wir die Vergleichsfunktion wie folgt schreiben:
function compareUsersByIdAndEmail($a, $b) {
$emailCompare = strcmp($a['email'], $b['email']);
if ($emailCompare !== 0) {
return $emailCompare;
}
return $a['id'] <=> $b['id'];
}
Die Verwendung dieser Funktion in Array_udiff () kann raffiniertere Differenzvergleiche erreichen.
Array_udiff () bietet eine sehr flexible Array -Differenz -Vergleichsmethode, insbesondere für die Verarbeitung von Szenarien strukturierter Daten. Durch benutzerdefinierte Vergleichsfunktionen können wir über willkürliche komplexe Logik urteilen und die Freiheit und Ausdruckskraft der Array -Verarbeitung erheblich verbessern.
Bei der Verarbeitung komplexer Geschäftsdaten wie Benutzerinformationen, Produktlisten, Protokollierung usw. ist das Beherrschen der Verwendung von Array_udiff () zweifellos eine wichtige Fähigkeit.