Aktueller Standort: Startseite> Neueste Artikel> Können benutzerdefinierte Vergleichsfunktionen für array_diff_assoc () verwendet werden? (Nein, erklären Sie die Alternative im Detail)

Können benutzerdefinierte Vergleichsfunktionen für array_diff_assoc () verwendet werden? (Nein, erklären Sie die Alternative im Detail)

M66 2025-06-06

Array_diff_assoc () basiert auf dem integrierten Vergleichsmechanismus von PHP, um festzustellen, ob zwei Arrays gleich sind. Es verwendet den Standard -PHP -Vergleichsoperator ( == ). Diese Funktion liefert keinen Parameter, um eine benutzerdefinierte Vergleichsfunktion zu übergeben, sodass Sie die Art und Weise, wie sie vergleicht, nicht direkt ändern.

Insbesondere ist die Implementierung der Funktion array_diff_assoc () nicht so konzipiert, dass sie Callback -Funktionen (wie usort () , array_map () und andere Funktionen zur Unterstützung eingehender benutzerdefinierter Funktionen unterstützen). Dies macht es uns unmöglich, die benutzerdefinierte Vergleichslogik in Array_Diff_assoc () anzupassen, z.

Standardweise, um zwei Arrays in PHP zu vergleichen

Standardmäßig führt Array_Diff_assoc () Standardvergleiche basierend auf den Schlüssel und Werten des Arrays durch. Wenn zwei Arrays den gleichen Schlüssel haben, ihre Werte jedoch nicht gleich sind, gibt Array_diff_assoc () den Differenzteil zurück. Zum Beispiel:

 $array1 = [
    "a" => "apple",
    "b" => "banana",
    "c" => "cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "berry",
    "c" => "cherry"
];

$result = array_diff_assoc($array1, $array2);
print_r($result);

Ausgabe:

 Array
(
    [b] => banana
)

In diesem Beispiel findet Array_diff_assoc () den Unterschied zwischen den beiden Arrays: Der Wert mit dem Schlüssel "B" ist in den beiden Arrays unterschiedlich, sodass er die Differenz zurückgibt.

Wenn Sie jedoch bestimmte benutzerdefinierte Regeln befolgen möchten (z. B. den Vergleich von Zeichenfolgen in irgendeiner Weise, das Ignorieren von Fall, das Ignorieren bestimmter bestimmter Zeichen usw.), erfüllt Array_Diff_assoc () die Anforderungen nicht.

Alternative: Implementierung der benutzerdefinierten Vergleichsfunktion

Obwohl array_diff_assoc () selbst keine benutzerdefinierten Vergleichsfunktionen unterstützt, können wir eine benutzerdefinierte Vergleichslogik über andere Methoden implementieren. Eine gemeinsame Lösung besteht darin, den Differenzvergleich über Array_Filter () und eine benutzerdefinierte Vergleichsfunktion manuell zu implementieren.

Hier ist ein Beispiel für das Ersetzen von Array_Diff_assoc () durch eine benutzerdefinierte Vergleichsfunktion:

 function custom_compare($value1, $value2) {
    // Zum Beispiel,Vergleichsfall ignorieren
    return strcasecmp($value1, $value2) !== 0;
}

function custom_array_diff_assoc($array1, $array2) {
    $result = [];

    foreach ($array1 as $key => $value1) {
        if (!array_key_exists($key, $array2) || custom_compare($value1, $array2[$key])) {
            $result[$key] = $value1;
        }
    }

    return $result;
}

$array1 = [
    "a" => "Apple",
    "b" => "banana",
    "c" => "Cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "Banana",
    "c" => "Cherry"
];

$result = custom_array_diff_assoc($array1, $array2);
print_r($result);

Ausgabe:

 Array
(
    [a] => Apple
    [b] => banana
)

In diesem Beispiel definieren wir eine benutzerdefinierte Vergleichsfunktion namens Custom_compare (), um den oberen und unteren Fall von Zeichenfolgen zum Vergleich zu ignorieren. In Custom_array_diff_assoc () prüfen wir zunächst, ob der Schlüssel in beiden Arrays vorhanden ist. Wenn es existiert, können wir beurteilen, ob die Werte durch eine benutzerdefinierte Vergleichsfunktion gleich sind. Wenn die Werte unterschiedlich sind, wird das Schlüsselwertpaar zum Ergebnisarray hinzugefügt.

Diese Methode gibt uns mehr Flexibilität und in der Lage, die Vergleichslogik entsprechend unseren Anforderungen anzupassen.

Andere gemeinsame Alternativen

Neben der manuellen Implementierung der Vergleichslogik können Sie auch andere integrierte Funktionen wie Array_udiff_assoc () verwenden, mit denen Sie benutzerdefinierte Vergleichsfunktionen verwenden können, um die Unterschiede in Arrays zu vergleichen. Das Prinzip der Funktion array_udiff_assoc () ähnelt der Array_Diff_assoc () , akzeptiert jedoch eine benutzerdefinierte Rückruffunktion, um Vergleiche durchzuführen.

Beispielcode:

 function custom_compare($value1, $value2) {
    return strcasecmp($value1, $value2);
}

$array1 = [
    "a" => "Apple",
    "b" => "banana",
    "c" => "Cherry"
];

$array2 = [
    "a" => "apple",
    "b" => "Banana",
    "c" => "Cherry"
];

$result = array_udiff_assoc($array1, $array2, 'custom_compare');
print_r($result);

Ausgabe:

 Array
(
    [a] => Apple
    [b] => banana
)

In diesem Beispiel verwendet die Funktion array_udiff_assoc () Custom_Compare (), um die Unterschiede zwischen zwei Arrays zu vergleichen, wodurch ein flexibleres Vergleichsverhalten ermöglicht wird.