Carmen: for-Schleife nur das erste $i anzeigen lassen.

hi forum,
ich arbeite hier an einer os-commerce Funktion eines online-shops, die durch eine Schleife alle DB-einträge, die anhand einer bestell-id abgelegt sind, ausliest. Ich möchte aber nur die Zeile der DB-Tabelle angezeigt bekommen, in der die Zwischensumme steht. Leider ist das ganze script ziemlich ineinander verdrahtet, so dass ich nicht gezielt auf die gewünschte DB-Feld zugreifen kann.

folgendes wird auf der Internetseite angezeigt:

Zwischensumme:  61.70 €
Rabatt:  3.09 €
Versandkosten:  0.00 €
Summe:          58.62 €

diese Zeilen werden mit folgendem PHP-code angezeigt:

for ($i=0; $i<$size; $i++)
{
$output_string .= '<tr>' . "\n" .
<td align="right" class="main">' . $GLOBALS[$class]->output[$i]['title'] . '</td>' . "\n" .
<td align="right" class="main">' . $GLOBALS[$class]->output[$i]['text'] . '</td>' . "\n" .
'</tr>';

}

ich möchte nur die erste Zeile der Schleife (das erste $i)angezeigt bekommen:
Zwischensumme:  61.70 €

Gibt es eine Möglichkeit, die for-Schleife nur das erste $i in title und text anzeigen zu lassen? ich habe am Ende der Schleife break; integriert, was aber leider nicht zum erwünschten Ergebnis geführt hat

viele gruesse
carmen

  1. Hi,

    ich möchte nur die erste Zeile der Schleife (das erste $i)angezeigt bekommen.

    Vielleicht verstehe ich das falsch aber warum dann überhaupt eine SCHLEIFE, wenn es nur das erste Element sein soll?

    MfG
    Danny

    1. hi,
      wenn ich  if($i==0)  in die for-schleife integriere, dann ändert sich nichts in der Anzeige.
      wenn ich die for-schleife weglasse und nur folgendes in die Funktion integiere, wird garnichts angezeigt.

      $output_string .= '<tr>' . "\n" .
      <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['title'] . '</td>' . "\n" .
      <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['text'] . '</td>' . "\n" .
      </tr>';

      auch wenn ich [$i] lösche, ändert sich nichts. aber [$i] wird doch benötigt, damit er einen indize hat oder?

      hier die komplette Funktion:

      function output() {
            $output_string = '';
            if (is_array($this->modules)) {
              reset($this->modules);
              while (list(, $value) = each($this->modules)) {
                $class = substr($value, 0, strrpos($value, '.'));
                if ($GLOBALS[$class]->enabled) {
                  $size = sizeof($GLOBALS[$class]->output);

      for ($i=0; $i<$size; $i++) {
                    if($i==0) {
                    $output_string .= '              <tr>' . "\n" .
                                      '                <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['title'] . '</td>' . "\n" .
                                      '                <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['text'] . '</td>' . "\n" .
                                      '              </tr>';

      }
                  }
                }
              }
            }

      return $output_string;
          }

      Carmen

      1. Hiho,

        $output_string .= '              <tr>' . "\n" .
                                        '                <td align="right" class="main">' . $GLOBALS[$class]->output[0]['title'] . '</td>' . "\n" .
                                        '                <td align="right" class="main">' . $GLOBALS[$class]->output[0]['text'] . '</td>' . "\n" .
                                        '              </tr>';

        Keine Schleife kein gar nichts notwendig. Aber mal so unter uns, wie bist du so weit mit dem Script gekommen (mit Klassen usw.) wenn du nicht mal nachvollziehen kannst was deine for() Schleife macht?

        Grüsse

        Marc

        1. Hi Marc,
          natürlich kann ich nachvollziehen, was die Schleife macht. ich weiss nur nicht wie ich sie richtig umschreiben muss.

          Übrigens funktioniert es mit [0] nicht. Es werden weiterhin alle Zeilen aus der DB gelesen.

          trotzdem vielen dank
          carmen

          1. Hiho,

            Übrigens funktioniert es mit [0] nicht. Es werden weiterhin alle Zeilen aus der DB gelesen.

            Dann ist deine Schleife absoluter Unsinn. schliesslich macht die nichts weiter als mit [0] anzufangen, dann [1] usw. Wenn [0] alleine alles ausgibt, dann brauchst du die Schleife nicht...
            Für mehr müsste man dann halt wissen was in der Variablen überhaupt drinne steckt. Schonmal ein var_dump() bzw. print_r() probiert um rauszufinden was da zurück kommt?

            Marc

            1. ich sehe gerade dass mit einem
              var_dump($GLOBALS[$class]->output);

              schon eine Schleife durchlaufen wird:

              array(1) { [0]=>  array(3) { ["title"]=>  string(14) "Zwischensumme:" ["text"]=>  string(12) "28.20 €" ["value"]=>  float(28.2) } } array(0) { } array(1) { [0]=>  array(3) { ["title"]=>  string(27) "Pauschale Versandkosten ():" ["text"]=>  string(11) "3.00 €" ["value"]=>  string(4) "3.00" } } array(0) { } array(1) { [0]=>  array(3) { ["title"]=>  string(13) "Summe:" ["text"]=>  string(19) "31.20 €" ["value"]=>  float(31.2) } }

              setze ich ein exit; nach
              var_dump($GLOBALS[$class]->output);
              exit;
              wird nur die erste Stelle im array ausgegeben:

              array(1) { [0]=>  array(3) { ["title"]=>  string(14) "Zwischensumme:" ["text"]=>  string(12) "28.20 €" ["value"]=>  float(28.2) } }

              das ist genau das was ich haben will. nur halt nicht mit einem var_dump ausgeworfen.

              Weiss leider immer noch nicht weiter, wie nur die erste Zeile angezeigt bekommen kann

              viele grüße
              carmen

  2. Hi,
    for ($i=0; $i<$size; $i++)
     {
      if($i==0) {
       $output_string .= '<tr>' . "\n" .
     <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['title'] . '</td>' . "\n" .
     <td align="right" class="main">' . $GLOBALS[$class]->output[$i]['text'] . '</td>' . "\n" .
     '</tr>';
      }

    }

    Verstehen tu ich das zwar nicht, aber so funktionierts.

    mfg

    PHP_Dude

    1. Verstehen tu ich das zwar nicht, aber so funktionierts.

      mfg

      PHP_Dude

      Ist doch klar: die schleife wird zwar "size"-mal durchlaufen, aber nur beim ersten mal (wenn $i noch null ist) wird etwas gemacht.... also braucht man gar keine schleife!!!

  3. Hi,

    for ($i=0; $i<$size; $i++)
    ...
    Gibt es eine Möglichkeit, die for-Schleife nur das erste $i in title und text anzeigen zu lassen?

    wozu dann eine Schleife? Das erste Element hat den Indexwert 0.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.