php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Anfangswert eines Array festlegen


 
bweichel
17-11-2005, 14:05 
 
Hallo,

wie kann ich den Anfangswert (also den Key) eines Array in einer While-Schleife festlegen?


// das array soll nicht mit 0, sonder mit 1 beginnen...
while($row[] = mysql_fetch_assoc($result));


Beste Dank!

Gruß Björn

 
xManUx
17-11-2005, 14:10 
 
z.b. so:



$i=1;
while($row = mysql_fetch_assoc($result)) {
$all[$i] = $row;
$i++;
}


aber wozu soll das gut sein? :confused:

 
bweichel
17-11-2005, 14:15 
 
gibt es keine bessere möglichkeit den anfangswert festzulegen? muss ich immer zuerst das array auswerten und wieder neu zusammensetzen?

@xManuX: das array wird an ein smarty warenkorb-template übergeben. ich wolle den key für die postennummer im warenkorb verwenden und die fängt nun mal mit 1 an. ich weiß zwar das man mit smarty auch einen zähler setzen kann, aber ich dachte das es so einfacher ist. wenn das aber nicht gehen sollte, dann verwende ich halt den counter von smarty.

 
wahsaga
17-11-2005, 14:22 
 
Original geschrieben von bweichel
gibt es keine bessere möglichkeit den anfangswert festzulegen? muss ich immer zuerst das array auswerten und wieder neu zusammensetzen?
Du kannst den Code natürlich entsprechend verkürzen:
$i=1;
while($row[$i] = mysql_fetch_assoc($result)) {
$i++;
}
Oder auch gleich
$i=1;
while($row[$i++] = mysql_fetch_assoc($result)) {
}

 
saraneus
17-11-2005, 14:25 
 
Den Iterator braucht man nicht:


$row = array(null);
while($row[] = mysql_fetch_assoc($result));

 
bweichel
17-11-2005, 14:35 
 
@saraneus: mit deinem Beispiel, hat sich mein Problem aber nicht gelöst... vielleicht ließt du dir die frage nochmal genau durch **nett gemeint** ... oder irre ich mich ;-)...

 
saraneus
17-11-2005, 14:50 
 
oO

Du baust ein zweidimensionales Array mit Datensätzen aus deiner DB-Anfrage auf. Du willst, dass der Index der ersten Dimension mit 1 beginnt:

$bla[0] = nix
$bla[1] = mysql_fetch_assoc(..);
$bla[2] = mysql_fetch_assoc(..);

Das entnehme ich deiner Formulierung. Und genau das bewerkstelligt mein Vorschlag. Hast du ihn ausprobiert?

 
wahsaga
17-11-2005, 14:57 
 
Original geschrieben von saraneus
Du willst, dass der Index der ersten Dimension mit 1 beginnt: [...]
Und genau das bewerkstelligt mein Vorschlag.
Nein, nicht ganz - dein Array beginnt nach wie vor mit dem Index 0, nur das in diesem Arrayelement nichts drinsteht.
Das ist, wie du zugeben wirst, etwas anderes, als ob es gar keinen Array-Index 0 gibt.
Und je nachdem, wie die weitere Verabreitungslogik aussieht, könnte ein "leerer" nullter Eintrag durchaus ein Problem darstellen. (Wobei man da schon sagen muss, dass es reichlich dämlich von Smarty ist, an dieser Stelle von der in der Programmierung üblichen bei Null beginnenden Zählweise abzuweichen ...)

 
bweichel
17-11-2005, 15:00 
 
natürlich habe dein vorschlag ausprobiert, aber das ist ja voll geknaupt. was bringt es mir wenn ich später doch ein array mit 0 habe, dort aber nur der Wert leer ist. dann habe ich doch nichts gewonnen. ich will genau die gleiche anzahl array`s haben, wie auch in der datenbank stehen. jedoch nur, dass der key nicht bei null anfängt, sondern bei 1. bei deiner version habe ich doch ein array mehr.

 
saraneus
17-11-2005, 15:08 
 
Jaja, ich weiß, was ihr meint :-) Da aber gesagt wurde, dass Smarty mit dem Index arbeitet, um das Array zu benutzen, ging ich davon aus, dass ein "0ter" Eintrag nicht störend ist. Da anscheinend doch, geb ich Smarty eine schlechte Note...

Den Startwert != 0 würde ich als literalen Index bezeichnen. Als numerischer macht er keinen Sinn.

 
xManUx
18-11-2005, 07:43 
 
ich behaupte einfach mal, dass smarty "unschuldig" ist, und das problem an der art der und weise in der handhabung liegt... ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:56 Uhr.