dedlfix: Kann Array nicht auf "leer" bzw. keinen Inhalt prüfen

Beitrag lesen

Tach!

if (empty ($_SESSION['Warenkorb']))
{
   array_push ($_SESSION['Warenkorb'], $Bestellposition);
}

Soweit so richtig, aber nimm kein array_push(), wenn du nur einen Wert hinzuzufügen hast. Da ist die Zuweisung $array[] = wert; einfacher und spart auch einen Funktionsaufruf.

for ($i = 0; $i < count ($_SESSION['Warenkorb']); $i++)

Wenn du durch ein Array komplett durchlaufen möchtest, nimm bevorzugt foreach. Das notiert sich einfacher und man muss als Leser auch nicht nachvollziehen, ob du irgendeine Besonderheit beim Iterieren eingebaut hast (wie zum Beispiel Start an Position 1 statt 0).

Aber ich komme nicht in den ersten Zweig meines Codes, der ja zutreffen müsste.

Du hast das konkret wie überprüft? Man kann auch mit var_dump(empty ($_SESSION['Warenkorb'])) prüfen, ob empty() das erwartete Ergebnis liefert. Und der erste Zweig deines Codes ist der von mir oben zitierte?

Schreibe ich nun if ($_SESSION['Warenkorb'][0] === "") anstatt if (empty ($_SESSION['Warenkorb'])),

Wenn das Array leer ist, wieso probierst du dann mit einen Key (0) auf Elemente zuzugreifen?

dann bekomme ich für diese Anweisung den Hinweis "Notice: Undefined offset: 0".

Logisch.

Wie muss ich das Konstrukt korrekt auf "Leere" bzw. keinen Inhalt prüfen?

empty() ist schon richtig. Beachte aber die Sonderfälle, auch einige Werte werden von PHP als empty angesehen, zum Beispiel 0 und '0'.

dedlfix.