Wie lassen sich die beiden folgenden Funktionsaufrufe vergleichen?
isset($a['key'])
array_key_exists('key', $a)
Wie lassen sich die beiden folgenden Funktionsaufrufe vergleichen?
isset($a['key'])
array_key_exists('key', $a)
array_key_exists
wird Ihnen definitiv sagen, ob ein Schlüssel in einem Array existiert, während isset
wird nur zurückgegeben true
wenn der Schlüssel/die Variable existiert und ist nicht null
.
$a = array('key1' => '', 'key2' => null);
isset($a['key1']); // true
array_key_exists('key1', $a); // true
isset($a['key2']); // false
array_key_exists('key2', $a); // true
Es gibt einen weiteren wichtigen Unterschied: isset
beschwert sich nicht, wenn $a
nicht existiert, während array_key_exists
tut.
Ich plädiere immer dafür, nur isset()
weil ich der Meinung bin, dass NULL immer genau dasselbe bedeuten sollte wie NO VALUE oder NOT SET, um Zweideutigkeiten zu vermeiden.
Zwischen array_key_exists
y isset
obwohl beide sehr schnell sind [O(1)]
, isset
ist deutlich schneller. Wenn diese Prüfung viele tausend Mal durchgeführt wird, sollten Sie die Option isset
.
Es sollte jedoch beachtet werden, dass sie nicht identisch sind - wenn der Array-Schlüssel existiert, der Wert jedoch null
, isset
wird zurückgegeben false
y array_key_exists
wird zurückgegeben true
. Wenn der Wert sein kann null
müssen Sie Folgendes verwenden array_key_exists
.
Wie in den Kommentaren erwähnt, kann Ihr Wert sein null
ist die schnelle Wahl:
isset($foo[$key]) || array_key_exists($key, $foo)
Ich konnte dies nicht genug betonen. Ich habe gerade den ganzen Tag damit verbracht, herauszufinden, warum ein Skript über 300 Sekunden für die Ausführung brauchte. Ich habe zu isset() gewechselt, jetzt wird es in weniger als 3 Sekunden ausgeführt.
@celwell, ich habe den ernsthaften Verdacht, dass Sie tatsächlich ein anderes Problem haben, wenn Sie einfach umschalten array_key_exists
a isset
eine Geschwindigkeitssteigerung von 297 Sekunden.
Ihr Vergleich der Ausführungszeit erschreckt die Scheiße aus mir heraus, ich bin gezwungen, array_key_exists zu verwenden, und wenn Ihr Vergleich wahr ist, dann bedeutet es, ich bin in der Scheiße, wenn wir auf Produktionsserver bewegen :(
Antwort auf eine alte Frage da keine der Antworten auf das Problem der "Warnung" einzugehen scheint (Erklärung folgt)
Grundsätzlich wird in diesem Fall geprüft, ob ein Schlüssel in einem Array existiert, isset
et array_key_exists
Wie prüfen wir also, ob ein Schlüssel vorhanden ist, dessen Wert in einer Variablen null sein kann?
ohne eine Warnung zu erhalten, ohne den vorhandenen Schlüssel zu übersehen, wenn sein Wert null (was sich die PHP-Entwickler dabei gedacht haben, wäre auch eine interessante Frage, aber sicher nicht relevant für SO). Und natürlich wollen wir nicht @
isset($var[$key]); // silent but misses null values
array_key_exists($key, $var); // works but warning if $var not defined/array
Es scheint is_array
in die Gleichung einbezogen werden sollte, aber es wird eine Warnung ausgegeben, wenn $var
ist nicht definiert, daher könnte dies eine Lösung sein:
if (isset($var[$key]) ||
isset($var) && is_array($var) && array_key_exists($key, $var)) ...
was wahrscheinlich schneller ist, wenn sich die Tests hauptsächlich auf Nicht-Null-Werte beziehen. Andernfalls für ein Array mit überwiegend Nullwerten
if (isset($var) && is_array($var) && array_key_exists($key, $var)) ...
wird die Arbeit erledigen.
Die PHP-Funktion array_key_exists()
bestimmt, ob ein bestimmter Schlüssel oder numerischer Index für ein Element eines Arrays existiert. Wenn Sie jedoch feststellen wollen, ob ein Schlüssel existiert und ist mit einer Wert das PHP-Sprachkonstrukt isset()
kann Ihnen das sagen (und dass der Wert nicht null
). array_key_exists()
kann keine Informationen über den Wert eines Schlüssels/Index zurückgeben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Jetzt gibt isset FALSE zurück, wenn der Wert null oder leer ist. array_key_exists gibt true zurück, auch wenn der Array-Indexwert leer ist. Zuvor gab isset TRUE zurück, auch wenn der Array-Indexwert leer ist, so dass es verwendet werden kann, um zu prüfen, ob ein Array-Schlüssel existiert.