2017-04-05 1 views
0

Ich fragte mich, warum die array_uintersect_assoc Vergleichsfunktion, die "muss eine ganze Zahl kleiner als, gleich oder größer als Null, wenn das erste Argument als kleiner, gleich oder größer als die zweite" (http://php.net/manual/en/function.array-uintersect-assoc.php). Wenn ich zwei Arrays vergleiche, brauche ich nur einen booleschen Wert: Die Elemente stimmen entweder überein oder nicht.Warum benötigt array_uintersect_assoc eine Vergleichsfunktion mit nicht booleschen Rückgabewerten?

Was ist der eigentliche Grund für dieses Verhalten?

Antwort

0

Die Funktion wurde auf diese Weise implementiert, um die Verwendung "klassischer" Vergleichsfunktionen zu ermöglichen, die eine solche Rückgabestrategie verwenden. Eine solche Funktion muss typischerweise drei Fälle ausdrücken können, was aus offensichtlichen Gründen nicht mit einem booleschen Rückgabewert möglich ist.

Sie können jedoch auch eine Vergleichsfunktion verwenden, die ein boolesches Ergebnis zurückgibt, da PHP als eine schwache typisierte Sprache das für Sie automatisch konvertiert. Werfen Sie einen Blick auf dieses Beispiel, das eine leicht modifed Version der in der Funktion Dokumentation sind:

<?php 
function mystrcasecmp($a, $b) { 
    return strcasecmp($a, $b) ? true : false; 
} 

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); 
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red"); 

print_r(array_uintersect_assoc($array1, $array2, "mystrcasecmp")); 

Sie können sehen, dass die Vergleichsfunktion, hier einen Booleschen Wert zurück, doch das Ergebnis ist genau das gleiche.

Fazit: Die vorhandene Implementierung ist flexibler, erlaubt aber die Verwendung einer Vergleichsfunktion, die ebenfalls ein boolesches Ergebnis liefert.

Verwandte Themen