457 Stimmen

Was ist der Unterschied zwischen isset() und array_key_exists()?

Wie lassen sich die beiden folgenden Funktionsaufrufe vergleichen?

isset($a['key'])

array_key_exists('key', $a)

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.

591voto

deceze Punkte 489288

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.

65 Stimmen

Ich wünschte, ich würde Chinesisch verstehen :)

247 Stimmen

@Zacky Japanisch. Und da steht nur 'foobar'.

24 Stimmen

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.

144voto

Patrick Fisher Punkte 7721

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)

20 Stimmen

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.

28 Stimmen

@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.

4 Stimmen

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 :(

19voto

Matijs Punkte 2473

Der Hauptunterschied bei der Arbeit mit Arrays besteht darin, dass array_key_exists 収益 true wenn der Wert null , während isset wird zurückgegeben false wenn der Wert des Arrays auf null .

Véase isset auf der PHP-Dokumentationsseite.

3 Stimmen

isset gibt zurück. falsch und nicht null .

0 Stimmen

Korrigiert, obwohl deceze natürlich inzwischen die vollständigere Antwort hat.

15voto

Déjà vu Punkte 27104

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

  • gibt an, ob der Ausdruck (Array) definiert ist und der Schlüssel gesetzt ist
  • keine Warnung oder Fehler, wenn die var nicht definiert ist, kein Array ...
  • sondern 収益 falsch wenn der Wert für diesen Schlüssel null

et array_key_exists

  • sagt, ob ein Schlüssel in einem Array existiert, wie der Name schon sagt
  • sondern gibt eine Warnung aus, wenn der Array-Parameter nicht ein Array

Wie prüfen wir also, ob ein Schlüssel vorhanden ist, dessen Wert in einer Variablen null sein kann?

  • die ein Array sein kann, aber nicht sein muss
  • (oder ähnlich ist ein mehrdimensionales Array, für das die Schlüsselprüfung bei Dim 2 erfolgt und Dim 1 Wert darf kein Array für die 1 sein st dim (usw...))

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.

11voto

Anthony Rutledge Punkte 5794

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.com

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.

Powered by:

X