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)
Funktion isset()
schneller ist, prüfen Sie http://www.php.net/manual/en/function.array-key-exists.php#82867
Das stimmt, aber man muss bedenken, dass isset()
gibt false zurück, wenn die Variable gesetzt ist, aber den Wert von " null
"
Ergänzt man (als algebraische Kuriosität) die Antwort von @deceze mit der @
Operator, und die Angabe von Fällen, in denen es "besser" ist, den @
... Nicht wirklich besser, wenn Sie (kein Protokoll und) Mikro-Performance-Optimierung benötigen:
array_key_exists
: ist wahr, wenn ein Schlüssel in einem Array existiert;isset
: ist true
wenn der Schlüssel/die Variable existiert und ist nicht null
[ schneller als array_key_exists ];@$array['key']
: ist true
wenn der Schlüssel/die Variable existiert und ist nicht ( null
oder '' oder 0) ; [so viel langsamer?]
$a = array('k1' => 'HELLO', 'k2' => null, 'k3' => '', 'k4' => 0);
print isset($a['k1'])? "OK $a[k1].": 'NO VALUE.'; // OK print array_key_exists('k1', $a)? "OK $a[k1].": 'NO VALUE.'; // OK print @$a['k1']? "OK $a[k1].": 'NO VALUE.'; // OK // outputs OK HELLO. OK HELLO. OK HELLO.
print isset($a['k2'])? "OK $a[k2].": 'NO VALUE.'; // NO print array_key_exists('k2', $a)? "OK $a[k2].": 'NO VALUE.'; // OK print @$a['k2']? "OK $a[k2].": 'NO VALUE.'; // NO // outputs NO VALUE. OK . NO VALUE.
print isset($a['k3'])? "OK $a[k3].": 'NO VALUE.'; // OK print array_key_exists('k3', $a)? "OK $a[k3].": 'NO VALUE.'; // OK print @$a['k3']? "OK $a[k3].": 'NO VALUE.'; // NO // outputs OK . OK . NO VALUE.
print isset($a['k4'])? "OK $a[k4].": 'NO VALUE.'; // OK print array_key_exists('k4', $a)? "OK $a[k4].": 'NO VALUE.'; // OK print @$a['k4']? "OK $a[k4].": 'NO VALUE.'; // NO // outputs OK 0. OK 0. NO VALUE
PS: Sie können diesen Text ändern/korrigieren/ergänzen, es ist ein Wiki.
@Bracketworks, "Nie"(?) ist ein starkes Wort für Wissenschaft oder Programmierung, sogar für Einstein oder Newton... Für mich ist es nur ein kleines Leistungsproblem. Ich benutze es, weil es kurz ist, um zu sagen $x = @$_GET['x'];
als $x = array_key_exists('x',$_GET)? $_GET['x']: '';
. Siehe diese Frage um selbst zu entscheiden.
Nein, es ist wirklich "nie" besser, die @
Operator, insbesondere bei der Dereferenzierung von Arrays. isset()
o array_key_exists()
die Absicht des Codes zu kommunizieren und nicht einen bereits von Natur aus missbrauchbaren Operator zu missbrauchen. Natürlich müssen Sie mich nicht überzeugen, aber wenn Sie ein Beispiel nennen können, in dem der @
Operator messbar leistungsfähiger ist oder die Absicht des Codes prägnanter vermittelt als eine Alternative, ändere ich gerne meinen Ton.
Die beiden sind nicht genau dasselbe. Ich kann mich nicht mehr an die genauen Unterschiede erinnern, aber sie sind sehr gut beschrieben in Was ist schneller und besser, um festzustellen, ob ein Array-Schlüssel in PHP existiert? .
Der allgemeine Konsens scheint zu sein, wann immer es möglich ist, isset zu verwenden, weil es ein Sprachkonstrukt ist und daher schneller ist. Die Unterschiede sollten jedoch oben dargelegt werden.
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.