• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Undefined offset: 1 bei explode();

Timmer

Mitglied
Hey, bekanntes Problem, ich explode einen String, bei dem das zweite Array-Element unter Umständen leer ist, also garnicht geschrieben wird. Jetzt versuche ich, dieses nicht existierende Array-Element in eine Variable zu speichern. Natürlich meckert er da. Umgehen wollte ich das Problem mit einem String, den ich einfach hinter den zu explodenden String hänge und später vom zweiten Array-Element wieder abziehen wollte. Geht nicht, bzw. geht schon, Notice kommt aber trotzdem noch...

PHP:
foreach($array as $string){
   list($foo, $bar) = explode(' = ', $string . 'foobar'); //Fehler: Notice: Undefined offset: 1
   $new_array[$foo] = substr($bar, 0, -6);
}
Hat jemand eine Idee, wie ich die Notice los werde?
 
Zuletzt bearbeitet:
prüf doch vorher ob die Variable gesetzt ist.
PHP:
if(isset($string))
{
 foreach($array as $string){
   list($foo, $bar) = explode(' = ', $string ); 
   $new_array[$foo] = substr($bar, 0, -6);
}  
}
 
Wenn ich Dich richtig verstehe, sollte es so passen:
PHP:
foreach ($array as $string) {
   list($foo, $bar) = explode(' = ', $string . ' = ');
   $new_array[$foo] = $bar;
}
 
Oh ja, da hab ich garnich drann gedacht :P

Mir leuchtet aber immernoch nicht ein, warum die Notice kommt, denn immerhin verpasse ich dem 2ten Array-Element mit einem sinnlosen String ja auch einen Wert, wodurch eben ein 2tes Array-Element entsteht.

Aber egal, jetzt weiß ich bescheid (auch wenn ich gerade gemerkt hab, dass ich den Code oben garnicht mehr brauche xD)
 
Timmer schrieb:
denn immerhin verpasse ich dem 2ten Array-Element mit einem sinnlosen String ja auch einen Wert, wodurch eben ein 2tes Array-Element entsteht

Nein, eigentlich tust du das nicht. Es entstehen nur dann zwei Array-Elemente, wenn der „explodierte“ String den Teil " = " enthält. Wenn er vor dem Hinzufügen von "foobar" kein Gleichheitszeichen enthielt, tut er es danach ebenfalls nicht. Auch dann wird nur ein Array-Element entstehen und $bar dürfte nicht gesetzt sein.
 
Zurück
Oben