Benötigt man empty() & array auf leer prüfen ?
Nicole
- php
Hallo erst mal ;-)
mal wieder eine Frage aus der Kategorie
"wissenswert aber nie erwähnt"
$xy = "0";
if($xy){echo 'Ja, xy ist vorhanden';}
else{echo 'Nein, xy ist NICHT vorhanden';}
if(!empty($xy)){echo 'Ja, xy ist vorhanden';}
else{echo 'Nein, xy ist NICHT vorhanden';}
---------------------------------
Da Beides die gleichen Ergebniss liefert, frage ich
mich warum ich empty() nutzen sollte und mehr zu
schreiben haben. Oder gibts doch einen Unterschied ?
In diesem Zusammenhang:
Da empty nicht bei Arrays klappt, bzw. auch ein komplett
leeres Array als "Vorhanden" gilt...
bsp. $q = array('','','');
Wie kann ich ein Array auf "komplett leer" prüfen,
ohne jeden einzelnen Wert auf "vorhanden" zu prüfen ?
Gruss
Nikki
Hallo erst mal ;-)
Hallo,
also
Das ist ein leeres Array:
$xy=array();
if(empty($xy)) { // Liefert true da $xy leer
echo "Ja, xy ist leer";
} else {
echo "Nein, xy ist nicht leer";
}
Du solltest auch nicht mit 0 testen, da 0 auch false || null ist.
Hallo,
nett gemeint aber keine Antwort auf meine Fragen.
Das ist ein leeres Array:
$xy=array();
Klar, aber meine Frage war:
bsp. $q = array('','','');
Wie kann ich ein Array auf leere WERTE prüfen,
ohne jeden einzelnen Wert auf "vorhanden" zu prüfen ?
if(empty($xy)) { // Liefert true da $xy leer
Ja, aber ich habe es so gemacht if(!empty(....
Was ich meinte war :
Wo ist der Unterschied ?
If(!$xy)...
if(empty($xy)....
Du solltest auch nicht mit 0 testen, da 0 auch false || null ist.
Ja genau, um selbst bei diesem Wert, der ja normalerweise
ein String sein sollte(da in Anführungszeichen )das
gleiche Ergebniss zu dokumentieren, sonst kommen hier
bestimmt wieder Antworten, die behaupten gerade bei 0
gäbe es einen Unterschied zwischen den IF's.
Apropo: Seltsam finde ich es schon dass, selbst wenn ich
null zu einem String konvertiere, das als Nicht vorhanden gilt:
$xy = (string)"0"; // Aber das betrifft nicht die aktuelle Frage.
Gruss
Nikki
Klar, aber meine Frage war:
bsp. $q = array('','','');Wie kann ich ein Array auf leere WERTE prüfen,
ohne jeden einzelnen Wert auf "vorhanden" zu prüfen ?
Hallo Nicole,
Du könntest, sofern Du weißt,
if (implode('',$q))
{
# (Tu was mit [mindestens einem] nicht leeren String...)
}
else {
# (Tu was mit leeren Werten...)
}
Gruß,
HendrikX
Hallo Hendrikx,
if (implode('',$q))
Ja so ähnlich mache ich auch teilweise,
allerdings wirds kompliziert bei mehrdimensionalen
Arrays.
Aber die Frage bezog sich darauf, ob es
irgendeine strenggeheime, absolut nicht genannte,
von Niemand benutzte... Funktion in den Weiten der
PHP Galaxis gibt, die es so einfach macht wie bei einer
normalen Variable ;-)
Aber im Ernst, scheint nicht so zu sein, also wohl weiterhin
Werte prüfen, egal ob durch implode, array_values,etc...
Gruss
Nikki
ps. Du weisst auch nicht zufällig ob es einen Unterschied
gibt zwischen:
if(!$xy...
oder
if(empty($xy...
ps. Du weisst auch nicht zufällig ob es einen Unterschied
gibt zwischen:if(!$xy...
oder
if(empty($xy...
Der Unterschied ist, dass der Parser bei
if (!$xy)
davon ausgeht, dass es $xy bereits gibt (geben sollte) und dass er, falls die Variable $xy nicht registriert ist, eine Fehlermeldung des Levels NOTICE (use of non-initialized Variable o.ä.) generiert -
wohingegen bei empty() auch das schiere Vorhandensein der Variablen gleich mit abgefragt werden kann.
Der Rückgabewert müsste aber, soviel ich weiß, bei beiden immer gleich sein.
psGruß,
HendrikX
Wo ist der Unterschied ?
If(!$xy)...
^^^^^^^^ Hier fragst du ob die Variable vorhanden ist.
if(empty($xy)....
^^^^^^^^^^^^^ Und hier ob das Array Werte enthält.
Wobei '' auch ein Wert ist.
erst wenn du z.B. unset($xy[4]) ausführst, dann ist der Wert an Position 4 wirklich nicht mehr vorhanden. Ob das ganze Array dann auch leer ist ist eine andere Frage.
if(empty($xy)....
^^^^^^^^^^^^^ Und hier ob das Array Werte enthält.
Hallo Dude,
vergiss mal einen Moment dass es sich um ein Array handelt.
$var = "0";
Du meinst, wenn ich jetzt frage:
if($var...
und würde logischerweise false als Antwort bekommen.
Das würde aber laut deiner Anwort:
If(!$xy)...
^^^^^^^^ Hier fragst du ob die Variable vorhanden ist.
bedeuten, dass die Variable nicht vorhanden ist.
Ist Sie aber doch, denn bei echo $var wird Sie ja ausgegeben.
Ja, ja ich weiss schon ;-) die Berühmte NULL, aber genau das treibt
mich ja zum Wahnsinn....
Aber nicht desto trotz:
Kannst DU mir ein einziges simples Beispiel nennen,
wo If(!$var.. oder If(empty($var)... zu verschiedenen
Ergebnissen kommen ?
Gruss
Nikki
Kannst DU mir ein einziges simples Beispiel nennen,
wo If(!$var.. oder If(empty($var)... zu verschiedenen
Ergebnissen kommen ?
Ich könnte Dir einen Warenkorb aus einem Onlineshop zeigen, aber das würde zu komplex hierfür sein. Was einfacheres fällt mir leider momentan nicht ein.
Der einfache Unterschied besteht darin:
Das if($var) ist eine Kurzschreibweise für if(isset($var))
isset():
Diese Funktion liefert TRUE, wenn die Variable oder das Array-Element var existiert, sonst FALSE.
empty():
Diese Funktion liefert TRUE, wenn eine Variable nicht definiert, leer oder gleich 0 ist, ansonsten FALSE.
Das heisst mit empty() kann man prüfen ob eine Variable leer ist oder nicht, das kann isset() nicht.
Nachtrag :
Hier findet man Tabellen wo die exakten Unterschiede aufgelistet sind:
Hallo Dude,
Das if($var) ist eine Kurzschreibweise für if(isset($var))
Nein das kann nicht stimmen:
$var = 0;
if($var... // ergibt False
während
if(isset($var)... // True ergibt
Gruss
Nikki
Hallo Dude,
Das if($var) ist eine Kurzschreibweise für if(isset($var))
Nein das kann nicht stimmen:
Du hast Recht, das ist die Kurzschreibweise für if($var==true)
Sorry
mfg
PHP_Dude
$xy = "0";
if($xy){echo 'Ja, xy ist vorhanden';}
else{echo 'Nein, xy ist NICHT vorhanden';}
Das ist falsch. Man prüft das Vorhandensein von Variablen mit isset(). Mit if($xy) testst du, ob $xy etwas ergibt, das als true angenommen werden kann. '', 0, '0' zählt, teilweise wegen automatischer Typconvertierung, alles als false.
if(!empty($xy)){echo 'Ja, xy ist vorhanden';}
else{echo 'Nein, xy ist NICHT vorhanden';}
Auch nicht richtig: empty() testet auf "ist leer", nicht auf "nicht vorhanden". '', 0, '0' zählt, teilweise wegen automatischer Typconvertierung, alles als leer.
Da empty nicht bei Arrays klappt, bzw. auch ein komplett
leeres Array als "Vorhanden" gilt...bsp. $q = array('','','');
Das ist ein kein leeres Array sondern eins mit 3 Elementen.