Ich wollte meine 2 Cent zu dieser Frage hinzufügen, da mir ein Mittelweg fehlte.
Wie bereits erwähnt, isset()
wird der Wert des Schlüssels ausgewertet, sodass zurückgegeben wird, false
wenn dieser Wert angegeben ist. null
Dort array_key_exists()
wird nur geprüft, ob der Schlüssel im Array vorhanden ist.
Ich habe einen einfachen Benchmark mit PHP 7 durchgeführt. Die angezeigten Ergebnisse sind die Zeit, die zum Beenden der Iteration benötigt wurde:
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
Ich habe die Ergebnisse dieser benutzerdefinierten Funktion auch zur Vervollständigung mit diesem Benchmark hinzugefügt:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Wie gesehen und bereits gesagt isset()
ist die schnellste Methode, kann aber false zurückgeben, wenn der Wert ist null
. Dies könnte zu unerwünschten Ergebnissen führen und sollte normalerweise verwendet werden, array_key_exists()
wenn dies der Fall ist.
Es gibt jedoch einen Mittelweg und das nutzt isset() || array_key_exists()
. Dieser Code wird unter Verwendung der Regel die schnellere Funktion isset()
und wenn isset()
false zurück nur dann verwenden , array_key_exists()
zu validieren. In der obigen Tabelle ist es genauso schnell wie ein klarer Anruf isset()
.
Ja, es ist ein bisschen mehr zu schreiben und es in eine Funktion zu packen ist langsamer, aber viel einfacher. Wenn Sie dies für die Leistung, das Überprüfen von Big Data usw. benötigen, schreiben Sie es vollständig aus. Andernfalls ist der sehr geringe Funktionsaufwand array_key_isset()
vernachlässigbar , wenn es sich um eine einmalige Verwendung handelt.