detlevk: Problem bei Ausgabe von assoziativem Array

Hallo,

ein assoziatives Array soll mit Schlüssel und 3 von 4 Wertspalten angezeigt werden. Die letzte Spalte wird nur zur Berechnung gebraucht.

Folgender Code (Ausschnitt):

  $zaehler = 1;  
  $key = key($korb);  
  foreach ($korb as $wert)  
  {  
    $gesamt = sprintf("€%7.2f ", $wert[1] * $wert[2]);  
    $zeile = "<tr><td>$zaehler.</td><td>$key</td>";  
    $zeile .= "<td>$wert[0]</td><td align=right>$wert[1]</td><td>€ $wert[2]</td><td align=right>$gesamt</td></tr>";  
    echo $zeile;  
    $sumItem = $sumItem + $wert[1]; //Gesamtzahl aufsummieren  
    $sumPrice = $sumPrice + ($wert[1] * $wert[2]); //Gesamtpreis aufsummieren  
    $sumZeile = "<tr><td></td><td></td><td><b>Gesamtsumme:</b></td><td align=right><b>$sumItem</b></td>";  
    $sumZeile .= "<td></td><td align=right><b>€ ".number_format($sumPrice, 2, ',', '.')."</b></td></tr>";  
    $zaehler++;  
    next($korb);  
    $key = key($korb);  
  }  
  echo "$sumZeile</table>";

Wenn jetzt z.B. 6 Zeilen im Array sind, wird die 1., 3. und 5. korrekt ausgegeben. Die Zählvariable ($zaehler) zählt 1., 2., 3.

Irgendwie kapiere ich nicht wo der Fehler liegt! Eine ähnliche Schleife auf einer anderen Seite funktioniert einwandfrei.

Das Array sieht auch aus wie gewünscht (überprüft mit print_r).

  1. Moin!

    ein assoziatives Array soll mit Schlüssel und 3 von 4 Wertspalten angezeigt werden. Die letzte Spalte wird nur zur Berechnung gebraucht.

    Folgender Code (Ausschnitt):

    Dein Code ist irgendwie nicht zielführend.

    Du hast anscheinen die foreach-Schleife entdeckt. Warum werkelst du dann mit den Funktionen key() und next() herum? foreach liefert dir doch die Keys frei Haus: foreach ($array as $key => $value) {...}

    Das Array sieht auch aus wie gewünscht (überprüft mit print_r).

    Ob das Array zu deiner Schleife passt, kann aber niemand überprüfen, wenn du es verheimlichst. Realistische Daten, zur Not auch anonymisierte Demodaten, sind bei solchen Fragen immer hilfreich.

    - Sven Rautenberg

    1. Du hast anscheinen die foreach-Schleife entdeckt. Warum werkelst du dann mit den Funktionen key() und next() herum? foreach liefert dir doch die Keys frei Haus: foreach ($array as $key => $value) {...}

      key() wird benötigt, weil der Schlüssel MIT ausgegeben werden soll.
      Das hier überflüssige next() war übrigens die Fehlerquelle, wie ich inzwischen selbst herausgefunden habe.

      Trotzdem danke für die Hilfe!

      »» Das Array sieht auch aus wie gewünscht (überprüft mit print_r).

      Ob das Array zu deiner Schleife passt, kann aber niemand überprüfen, wenn du es verheimlichst. Realistische Daten, zur Not auch anonymisierte Demodaten, sind bei solchen Fragen immer hilfreich.

      Wie du siehst, war eine Veröffentlichung hier auch gar nicht nötig.

      Detlev

      1. Moin!

        »» Du hast anscheinen die foreach-Schleife entdeckt. Warum werkelst du dann mit den Funktionen key() und next() herum? foreach liefert dir doch die Keys frei Haus: foreach ($array as $key => $value) {...}

        key() wird benötigt, weil der Schlüssel MIT ausgegeben werden soll.

        Wieso dies? Der Key des jeweils in foreach bearbeiteten Arrayelements steht doch bei MEINER Variante von forach() schlicht in der Variablen $key drin.

        Ob key() so einfach funktioniert, würde ich gerade bei foreach() anzweifeln wollen, denn diese Schleife arbeitet mit einer Kopie des Originalarrays, hat also auch einen eigenständigen Arraypointer, bzw. beeinflusst den Pointer des Originalarrays nicht, auf den key() zurückgreift.

        - Sven Rautenberg

        1. Ob key() so einfach funktioniert, würde ich gerade bei foreach() anzweifeln wollen, denn diese Schleife arbeitet mit einer Kopie des Originalarrays, hat also auch einen eigenständigen Arraypointer, bzw. beeinflusst den Pointer des Originalarrays nicht, auf den key() zurückgreift.

          • Sven Rautenberg

          Deine Variante ist tatsächlich besser!
          Ich lerne halt noch!

          Detlev

      2. Moin!

        Ergänzend sei angemerkt:

        »» »» Das Array sieht auch aus wie gewünscht (überprüft mit print_r).
        »»
        »» Ob das Array zu deiner Schleife passt, kann aber niemand überprüfen, wenn du es verheimlichst. Realistische Daten, zur Not auch anonymisierte Demodaten, sind bei solchen Fragen immer hilfreich.

        Wie du siehst, war eine Veröffentlichung hier auch gar nicht nötig.

        Nach meiner persönlichen Erfahrung ist es schlauer, in einem Posting immer gleich mehrere Lösungsstrategien anzubahnen und dafür Informationen anzufordern, als sich auf das Minimum zu beschränken - letzteres führt nur zu endlosem Hin-und-Her-Geposte ohne nennenswerte Fortschritte, weil sich Zusammenhänge nicht sofort aufzeigen.

        - Sven Rautenberg

  2. Hallo,

    ich weiss nicht genau, aber ich glaube
    $wert ist kein array, $korb[$wert]; aber.

    Grüsse