Bei steigender Komplexität der Anwendung soll die Geschwindigkeit in der Ausführung natürlich nicht auf der Strecke bleiben. Man kämpft um jede 10tel Sekunde . Datenbank-Statements werden optimiert, es wird nach der Anzahl der Kontextwechsel zwischen der DB und der Anwendung gesucht, das Design der ganzen Architekur überarbeitet. Manchmal aber kann man ganz klein beginnen und unglaubliche Ergebnisse erzielen.
Schon mal array_key_exists () ausprobiert? Zugegeben, es fällt anfangs garnicht auf. Aber werden die Arrays der SQL-Results größer, kann der Effekt, den man erzielt, wirklich ärgerlich sein. Ich möchte garnicht darüber nachdenken, wie diese Funktion implementiert wurde. Das sie existiert, finde ich schon schlimm genug. Was spricht eigentlich dagegen anstelle von array_key_exists () eher isset () einzusetzen? Auf der Website des php.net kann man dazu folgendes lesen:
isset () gibt nicht TRUE zurück für Schlüssel eines Arrays, die zu einem NULL-Wert gehören, array_key_existis() tut dies hingegen.
Wow! Das erklärt alles! Das Ding kann von Items eines Arrays, die NULL sind, sagen, daß sie existieren. Wozu braucht man das? Ich habe das ehrlich nie gebraucht und für einen Vorteil, den ich nicht erkennen kann, soll ich mit 120% mehr Ausführungszeit im Durchschnitt bezahlen. Das ist übrigens ein Wert, den ich mit einem kleinen Test erzielt habe und der arbeitet nur mit Arrays, deren Schlüssel aus Integer-Werten bestehen:
Have fun!
Quick and dirty… ja das ist “isset”
Du hast schon recht Geschwindigkeit ist wichtig aber:
1.) isset ist kein guter Stiel denn es ist keine Funktion sondern ein Sprachkonstrukt das als Funktion “getarn” ist.
2.) isset prüft ob ein Wert vorhanden ist d.h. NULL als Eintarg im Array ist kein Wert => false; array_key_exists() prüft ob der Schlüssel vorhanden ist d.h. der Wert kan sein was er will!
Also: array_key_exists() ist die saubere Lösung! …wenn man weiß was man tut und Geschwindigkeit braucht (z.B. in einer Schleife) dann kann man isset verwenden!
Gruß Thomas
Ich spreche da aus Erfahrung. Bei einer Optimierung einer Backendlösung, die elend langsam lief, war nicht etwa die Datenbank, sondern die Verwendung von array_key_exists() das Problem. In den seltensten Fällen muss man meiner Meinung nach wissen, ob da irgendwo ein Item mit dem Wert NULL ist.
„Wozu braucht man das?“
Du kannst damit bspw. vor dem Zugriff auf einen Arrayschlüssel seine Existenz prüfen und so die Notice vermeiden. Und ja, es gibt Fälle, in denen auch NULL ein sinnvoller Wert ist.
Ja, aber das überzeugt mich immer noch nicht. Nehmen wir mal an ich habe ein Element in einem Array, das NULL ist.
$arr = array (‘foo’ => NULL);
echo isset ($arr['foo']) ? ‘yes’ : ‘no’;
echo !empty ($arr['foo']) ? ‘yes’ : ‘no’;
isset und empty sind insofern sauber, dass keine Notice geworfen wird. Und wenn ich sogar schon den Schlüssel kenne, nachdem ich fragen muss, wenn ich array_key_exists benutzen will … ich komm’ da einfach nicht hinter.
Also ich kann auch absolut nicht zustimmen.
Man kann nicht allgemein sagen, isset() ist array_key_exists() vorzuziehen!
Das hängt vom jeweiligen Szenario ab.
Meistens, wenn man diese Funktion benutzt, will man wissen, ob ein key existiert, unabhängig ob der wert nun NULL ist oder nicht.
Ansonsten nimmt man klar isset() oder !empty()…
Wer die Funktion missbraucht, ist selbst schuld^^
@mark Wenn ich wissen will, ob ein Key in einem Array existiert, reicht mir isset (). Wenn ich hingegen herausfinden will, ob das Item nicht leer/null/false ist, könnte ich mich für !empty () entscheiden.
Es ist also nach wie vor unklar, warum ich mit dem Performance-Nachteil leben sollte.
[...] und wählt „Bearbeiten” aus. Dann ersetzt man die Funktion, die Ärger gemacht hat (hier stammt die Idee her): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 function [...]