hawkmaster: if(!empty( ?? funktioniert nicht oder nur Denkfehler?

Hallo zusammen,
warum greift die Prüfung mit !empty() nicht?
Normalerweise stent in der MySQL Tabellenspalte "MyColumn" ein Wert wie etwa;
text1#@#irgendwas
In einem Fehlerfall war die Spalte aber leer.
Also müsste doch auch das Array $test leer sein.
Trotzdem erfolgt die Echo Ausgabe und die Zuweisung mit ..[1] die dann natürlich einen "Notice: Undefined offset: 1 " Fehler bringt.

Code:

$test = explode("#@#",$saved["MyColumn"]);
var_dump($coverpaperfront);
echo "<br>";
if(!empty($coverpaperfront)){
 print_r($coverpaperfront);
 echo "<br>die länge ist " . count($coverpaperfront);
 $coverpaperfront = $coverpaperfront[1];
}

Ausgabe:
array(1) { [0]=>  string(0) "" }
Array ( [0] => )
die länge ist 1
Notice: Undefined offset: 1 in

Wieso greift das mit dem "empty()" nicht?

vielen Dank und viele Grüße
hawk

  1. Es heisst natürlich so:

    $test = explode("#@#",$saved["MyColumn"]);
    var_dump($test);
    echo "<br>";
    if(!empty($test)){
     print_r($test);
     echo "<br>die länge ist " . count($test);
     $test = $test[1];
    }

    sorry,

    1. Moin!

      Es heisst natürlich so:

      $test = explode("#@#",$saved["MyColumn"]);
      var_dump($test);
      echo "<br>";
      if(!empty($test)){
      print_r($test);
      echo "<br>die länge ist " . count($test);
      $test = $test[1];
      }

      $test ist nicht empty, es ist ein Array, das ein Element enthält (nämlich das Nullte).

      empty() ist nur dann wahr, wenn es ein leeres Array findet.

      explode() liefert aber immer ein Array mit mindestens einem Element zurück, niemals ein leeres Array.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hallo Sven
        auch dir nochmals danke
        Das war mir so nicht klar mit dem explode.

        Gruss und danke
        hawk

  2. Hallo

    warum greift die Prüfung mit !empty() nicht?

    wieso, sie greift doch.

    In einem Fehlerfall war die Spalte aber leer.

    Wieso ist dies ein Fehlerfall? Begründung?

    Trotzdem erfolgt die Echo Ausgabe und die Zuweisung mit ..[1] die dann natürlich einen "Notice: Undefined offset: 1 " Fehler bringt.

    ja, klar. Zähle bitte von 0 an :-)

    $test = explode("#@#",$saved["MyColumn"]);
    var_dump($coverpaperfront);
    echo "<br>";
    if(!empty($coverpaperfront)){
    print_r($coverpaperfront);
    echo "<br>die länge ist " . count($coverpaperfront);
    $coverpaperfront = $coverpaperfront[1];
    }

    Ausgabe:
    array(1) { [0]=>  string(0) "" }

    Das Array ist nicht leer, es enthält ein Element. Dieses Element hat den numerischen Index 0.

    Array ( [0] => )
    die länge ist 1
    Notice: Undefined offset: 1 in

    Wieso greift das mit dem "empty()" nicht?

    Es greift doch. Das Array ist nicht leer :-)
    Das erste Arrayelement ist leer,

      
      // $leer hat nach dieser Zuweisung den Wert true  
      $leer = empty(!coverpaperfront[0]);  
    
    

    prüfe dieses.

    Noch ein Hinweis:
    Code ohne vernünftige Kommentare ist miserabler Code.
    Code, der in einem Forum präsentiert wird, sollte eher mehr Kommentare aufweisen als Quellcode. Ja, eine nette Form spricht auch für sich und macht Code lesbarer.

    Du weißt im Moment, was Du vorhast. Der potentielle Helfer weiß es nicht.
    Jemand, der Hilfe haben möchte, sollte dem Helfer keine Hindernisse in den Weg stellen, sondern nach Möglichkeit Hindernisse entfernen. Dabei kann es sein, dass man durch das Wegräumen der Hindernisse bereits die Lösung findet, noch bevor man seine Frage abgeschickt hat.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,
      vielen Dank für deine Hilfe.
      Du hast natürlich recht mit den Kommentaren. Mir geht es ja auch so wenn ich jemandem helfen will. Bei fremdem Code ist das nicht gleich ersichtlich was derjenige meint.

      In einem Fehlerfall war die Spalte aber leer.
      Wieso ist dies ein Fehlerfall? Begründung?

      Weil in dieser Spalte sonst immer was steht und ich durch etwas ausprobieren einen Fehler verursachte so das nichts drin stand.
      Daher wollte ich zu Sicherheit den Fehler unten abfangen.

      ja, klar. Zähle bitte von 0 an :-)

      ich weiss das ein Array von 0 beginnt. Ich brauche aber den 2. Array Inhalt also das hinter "#@#".

      Das Array ist nicht leer, es enthält ein Element. Dieses Element hat den numerischen Index 0.
      Das erste Arrayelement ist leer,

      hmm, das verwirrt mich jetzt doch ein wenig.
      Hat das Array durch das "explode" den Index 0 erhalten? Also ist ein Array nicht leer wenn es zwar einen Index hat aber die Arrayelemente leer sind?

      Wie könnte man dann sinnvoll prüfen bzw. das der Fehler nicht auftritt?
      Etwa mit "if(!empty($test[1])){" ?

      $test = explode("#@#",$saved["MyColumn"]);
      var_dump($test);
      echo "<br>";
      if(!empty($test[1])){
       $test = $test[1];
      }

      vielen Dank und viele Grüße
      hawk