for-Schleife nur das erste $i anzeigen lassen.
Carmen
- php
0 Danny0 Carmen0 AllesMeins0 Carmen0 AllesMeins0 Carmen
0 PHP_Dude0 Dirk
0 Joachim
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
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
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
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
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
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
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
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
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!!!
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