In PHP ist Array_Diff_Uassoc () eine sehr nützliche Funktion zum Vergleich mehrerer Arrays und der Rückgabe aller Elemente, die im ersten Array vorhanden sind, in anderen Arrays jedoch fehlen. Im Gegensatz zu Array_Diff_assoc () ermöglicht es den Entwicklern mit Array_Diff_Uassoc (), Vergleichsfunktionen anzupassen, wodurch wir flexiblere Vergleichsvorgänge durchführen können.
In diesem Artikel werden wir Beispiele verwenden, um zu zeigen, wie die Funktion array_diff_uassoc () verwendet wird, um einen unterschiedlichen Vergleich zwischen mehreren Arrays zu erreichen. Wir werden auch diskutieren, wie benutzerdefinierte Vergleichsfunktionen verwendet werden, um das Verhalten von Vergleichen genau zu steuern.
array_diff_uassoc(array $array1, array $array2, array ...$arrays, callable $key_compare_func): array
$ array1 : Muss das erste Array, der zum Vergleich mit anderen Arrays verwendet wird.
$ array2, ... $ arrays : Optional, mehrere Arrays, die Elemente des Arrays werden mit dem ersten Array verglichen.
$ key_compare_func : Muss eine benutzerdefinierte Vergleichsfunktion für den Vergleich von Schlüssel mit Arrays sein.
Die Funktion array_diff_uassoc () gibt ein Array zurück, das alle Elemente enthält, die im ersten Array vorhanden sind, aber in anderen Arrays fehlen. Im Gegensatz zu Array_Diff_assoc () bestimmt Array_Diff_Uassoc () , ob es eine Differenz auf der Grundlage der Schlüsselvergleichsfunktion gibt.
Lassen Sie uns die grundlegende Verwendung von array_diff_uassoc () durch ein einfaches Beispiel verstehen.
<?php
// Das erste Array
$array1 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
// Das zweite Array
$array2 = array(
"a" => 1,
"b" => 2,
"c" => 5
);
// Benutzerdefinierte Vergleichsfunktionen:Vergleichen Sie nur Schlüssel
function compareKeys($key1, $key2) {
return $key1 <=> $key2;
}
// Vergleich der Unterschiede
$result = array_diff_uassoc($array1, $array2, 'compareKeys');
// Ausgangsergebnis
print_r($result);
?>
Array
(
[d] => 4
)
In diesem Beispiel vergleicht die Funktion array_diff_uassoc () Elemente in Array1 und Array2 über die benutzerdefinierte Vergleichsfunktion des Schlüssels. Da der Schlüssel 'd' nur in Array1 existiert, nur 'D' => 4 im Ergebnisarray.
In praktischen Anwendungen können mehrere Arrays am Vergleich teilnehmen, und Array_Diff_Uassoc () kann diese Situation ebenfalls umgehen.
<?php
// Das erste Array
$array1 = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
// Das zweite Array
$array2 = array(
"a" => 1,
"b" => 2,
"c" => 3
);
// Das dritte Array
$array3 = array(
"a" => 1,
"b" => 3,
"d" => 4
);
// Benutzerdefinierte Vergleichsfunktionen:Vergleichen Sie Werte
function compareValues($value1, $value2) {
return $value1 <=> $value2;
}
// Vergleich der Unterschiede
$result = array_diff_uassoc($array1, $array2, $array3, 'compareValues');
// Ausgangsergebnis
print_r($result);
?>
Array
(
[d] => 4
)
In diesem Beispiel enthält das von Array_Diff_Uassoc () zurückgegebene Ergebnis nur 'D' => 4 , da das Element nur in Array1 angezeigt wird und nicht in Array2 oder Array3 gefunden wird.
In einigen Fällen kann es erforderlich sein, die Funktion array_diff_uassoc () zu verwenden, um Arrays mit URLs zu verarbeiten. Zu diesem Zeitpunkt können wir eine benutzerdefinierte Vergleichsfunktion verwenden, um den Domänennamenteil in der URL zu vergleichen. Angenommen, wir müssen den Namen der URL -Domänen im Array durch M66.net ersetzen, was auf folgende Weise implementiert werden kann:
<?php
// Das erste Array,Enthalten mit URL Daten von
$array1 = array(
"site1" => "https://www.example.com/page1",
"site2" => "https://www.test.com/page2",
"site3" => "https://www.example.com/page3"
);
// Das zweite Array,Enthalten mit URL Daten von
$array2 = array(
"site1" => "https://www.example.com/page1",
"site4" => "https://www.test.com/page4"
);
// Benutzerdefinierte Vergleichsfunktionen:ersetzen URL Der Domain -Name in m66.net
function compareURLs($key1, $key2) {
// ersetzen URL Der Domainnamen Teil in
$key1 = preg_replace("/https:\/\/(?:www\.)?([^\/]+)/", "https://m66.net", $key1);
$key2 = preg_replace("/https:\/\/(?:www\.)?([^\/]+)/", "https://m66.net", $key2);
return $key1 <=> $key2;
}
// Vergleich der Unterschiede
$result = array_diff_uassoc($array1, $array2, 'compareURLs');
// Ausgangsergebnis
print_r($result);
?>
Array
(
[site3] => https://m66.net/page3
)
In diesem Beispiel verwenden wir einen regulären Ausdruck, um den Domänennamenteil in der URL durch m66.net zu ersetzen. Das Ergebnisarray enthält ein Element, das nur im ersten Array ist, d. H. 'Site3' => 'https://m66.net/page3' .
Mit der Funktion array_diff_uassoc () können wir mehrere Arrays sehr flexibel vergleichen, insbesondere wenn wir gemäß den benutzerdefinierten Regeln vergleichen müssen. Beispielsweise können Sie eine benutzerdefinierte Vergleichsfunktion verwenden, um Schlüssel oder Werte eines Array -Elements zu vergleichen oder sie sogar nach dem Domänennamenteil zu ersetzen, wenn ein Array mit einer URL verarbeitet wird. Diese Funktion ist in der tatsächlichen Entwicklung sehr nützlich, insbesondere wenn es sich um komplexe Datenunterschiede handelt.