Nicole: Benötigt man empty() & array auf leer prüfen ?

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

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

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

      1. 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,

        • dass $q tatsächlich ein Array ist und nicht den Wert null o.ä. hat,
        • und dass es wenn dann nur String-Werte enthält,
          zum Beispiel folgendes abfragen:

        if (implode('',$q))
        {
          # (Tu was mit [mindestens einem] nicht leeren String...)
        }
        else {
          # (Tu was mit leeren Werten...)
        }

        Gruß,

        HendrikX

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

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

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

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

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

            1. Nachtrag :

              Hier findet man Tabellen wo die exakten Unterschiede aufgelistet sind:

              http://www.blueshoes.org/en/developer/php_cheat_sheet/

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

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

  2. $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.