Aktueller Standort: Startseite> Neueste Artikel> Was passiert, wenn die Vergleichsfunktion 0, -1 und 1 zurückgibt?

Was passiert, wenn die Vergleichsfunktion 0, -1 und 1 zurückgibt?

M66 2025-05-15

In PHP wird die Funktion array_diff_uassoc () verwendet, um die Unterschiede zwischen zwei Arrays zu vergleichen und die Regeln für den Vergleich von Schlüssel anzupassen. Die grundlegende Syntax dieser Funktion lautet wie folgt:

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
  • $ array1 ist das erste Array.

  • $ array2 ist das zweite Array und wird mit $ array1 verglichen.

  • $ key_compare_func ist eine Rückruffunktion, die zwei Schlüssel vergleicht.

Die Funktion array_diff_uassoc () gibt ein Array zurück, das Elemente enthält, die in $ array1 vorhanden sind, aber nicht in $ array2 existieren. Der Vergleich basiert auf dem Schlüsselnamen (unter Verwendung einer benutzerdefinierten Rückruffunktion). Sie können jedoch auf einige Fragen stoßen: Wenn der Rückgabewert von KEY_COMPare_Func 0 , -1 oder 1 beträgt, welche Auswirkungen haben diese unterschiedlichen Rückgabewerte auf das Ergebnis der Funktion?

1. gibt den Effekt von 0 zurück

Wenn die Rückruffunktion von KEY_COMPare_Func 0 zurückgibt, bedeutet dies, dass die beiden Schlüssel gleich sind. In der Funktion array_diff_uassoc () bedeutet dies, dass die aktuellen Schlüsselwertpaare von $ array1 und $ array2 keinen Unterschied in den Schlüsselnamen haben. Daher werden diese Schlüsselwertpaare nicht als Teil des Unterschieds angesehen und erscheinen nicht im zurückgegebenen Ergebnisarray.

Beispiel:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'banana' => 'yellow'
];

function compare_keys($key1, $key2) {
    return 0;  // Es bedeutet, dass die beiden Schlüssel gleich sind
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);

Ausgabe:

 Array
(
    [apple] => red
)

Erläuterung: Da compare_keys () 0 zurückgibt, bedeutet dies, dass die Schlüsselnamen Apple und Banane gleich sind, ist Array_Diff_Uassoc () der Ansicht, dass sie keinen Unterschied haben, sodass das Rückgabearray nur den Wert 'rot' enthält, der dem Schlüsselapfel entspricht.

2. RECHEN SIE DIE Effekt von -1

Wenn KEY_COMPare_Func -1 zurückgibt, bedeutet dies, dass der Schlüssel in $ array1 kleiner als der Schlüssel in $ array2 ist. In diesem Fall ist Array_Diff_Uassoc () der Ansicht, dass das aktuelle Schlüsselwertpaar in $ array1 beibehalten werden sollte, da es in $ array2 nicht genau den gleichen Schlüssel findet. Daher erscheinen diese Schlüsselwertpaare im Ergebnisarray.

Beispiel:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'cherry' => 'red'
];

function compare_keys($key1, $key2) {
    return -1;  // äußern key1 Weniger als key2
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);

Ausgabe:

 Array
(
    [banana] => yellow
)

Erläuterung: Da Compare_Keys () -1 zurückgibt und angibt, dass der Schlüsselapfel kleiner als die Schlüsselkirsche ist, findet Banane das entsprechende Schlüsselpaar in $ array1 nicht, so

3. zurückgibt die Wirkung von 1

Wenn KEY_COMPare_Func 1 zurückgibt, bedeutet dies, dass der Schlüssel in $ array1 größer ist als der Schlüssel in $ array2 . Zu diesem Zeitpunkt betrachtet Array_Diff_Uassoc () das aktuelle Schlüsselwertpaar in $ array1 als überflüssig, sodass es vom Ergebnisarray ausgeschlossen wird.

Beispiel:

 $array1 = [
    'apple' => 'red',
    'banana' => 'yellow'
];

$array2 = [
    'apple' => 'green',
    'banana' => 'yellow'
];

function compare_keys($key1, $key2) {
    return 1;  // äußern key1 Größer als key2
}

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);

Ausgabe:

 Array
(
    [apple] => red
)

Erläuterung: In diesem Beispiel gibt Compare_Keys () 1 zurück, was angibt, dass der Schlüsselapfel größer ist als die Schlüsselbanane . Daher kann das Schlüsselwertpaar von Apple nicht in $ array1 gefunden werden, das genau das gleiche Schlüsselpaar wie $ array2 ist, und es wird im zurückgegebenen Array angezeigt.

Zusammenfassen

Bei Verwendung von Array_Diff_Uassoc () wirkt sich die Rückgabewerte 0 , -1 und 1 der Rückruffunktion direkt auf die Art und Weise aus, wie die Tasten verglichen werden:

  • Rückgabe 0 : bedeutet, dass die Schlüssel gleich sind und das aktuelle Schlüsselwertpaar nicht als Differenz betrachtet wird.

  • Rückgabe -1 : bedeutet, dass der Schlüssel in $ array1 kleiner als der Schlüssel in $ array2 ist und das aktuelle Schlüsselwertpaar im Ergebnisarray angezeigt wird.

  • Rückgabe 1 : bedeutet, dass der Schlüssel in $ array1 größer als der Schlüssel in $ array2 ist und das aktuelle Schlüsselwertpaar ausgeschlossen wird.

Durch Anpassung der Vergleichslogik der Rückruffunktion können wir die Vergleichsregeln flexibel steuern und so einen maßgeschneiderten Vergleich der Unterschiede erreichen.