schleife

Post Reply
Message
Author
pullmoll

schleife

#1 Post by pullmoll »

hallo, laut dem thread was bringt php habe ich mich mal damit beschäftigt und auch direkt eine frage.
ich habe einen schleifenkörper (for) und verstehe nicht warum es so ist wie es ist. im php manual stehen 2 beispiele.

Code: Select all

for &#40;$i = 1; $i <= 10; $i++&#41; &#123;
    print $i; &#125;
und das hier auch noch

Code: Select all

for &#40;$i = 1; $i <= 10; print $i, $i++&#41; ;
wobei ich die zweite version verstehe und auch nachvollziehen kann. i kleiner oder gleich 10 dann print i und inkrementieren. dann ist i ja 11 und die bedingung somit falsch so das die schleife unterbrochen wird, logisch.
die erste version ist aber seltsam (für mich) aber sie scheint richtig zu sein.
meine erklärung.
i ist 1, ist i kleiner oder gleich 10 dann inkrementiere 10 und dann print i. ist i also 10 dann inkrement (ergibt also 11) und dann print.
es müßte also 1 - 11 und nicht wie bei mir 1 - 10 ausgegeben werden.
weil wenn i <= 10 ist ist die bedingung wahr und die schleife wird weiter durchlaufen und der print befehl wird ausgeführt. sehe ich das richtig oder hat print in dem fall nichts damit zu tun? das wäre eine erklärung aber sicher bin ich mir nicht. wird hier leider nicht erklärt.

User avatar
elwood67
Posts: 232
Joined: 19. May 2004 10:03
Location: Nürnberg

Re: schleife

#2 Post by elwood67 »

pullmoll wrote:

Code: Select all

for &#40;$i = 1; $i <= 10; $i++&#41; &#123;
    print $i; &#125;
$i = 1 stimmt.
Bei der ersten Schleife ist $i = 1 nicht 10.
dann geht er hoch bis auf $i = 10 (2,3,4...10)

Er inkrementiert nicht 10 sondern zählt immer $i + 1 ($i++)

$i=11 printed er nicht mehr.
Gruß Jürgen
_______________________
Rechner: P4 mit Suse 9.2
_______________________
Und versammeln unsere eigene Armee, um diese Massenvernichtungswaffe zu entschärfen, die wir heute noch unseren Präsidenten nennen...

chrisjumper
Posts: 104
Joined: 12. Feb 2004 12:53
Location: Jülich

for schleifen...

#3 Post by chrisjumper »

Hallo Pullmoll,

also, eine "normale" For-Schleife ist so aufgebaut:

Code: Select all

for &#40;Initialisierung; Bedingung; Reinitialisierung&#41;
        Anweisung;
Gewiss kann man die Anweisunge auch noch als Anweisungsblock mit den geschweiften klammern angeben.

Die erste erfüllt diese Schmea ja eindutig, schauen wir uns nochmal deine ZWEITE Schleife an:

Code: Select all

for &#40;$i = 1; $i <= 10; print $i, $i++&#41; ;
Hier wird halt KEINE direkte Anweisung ausgeführt. Aber bei der Reinitialisierung der Schleife wird $i, durch Printf zuerst ausgegeben und dann mit "$i++" Inkrimentiert.

Daher geht das auch.
LG Chris

pullmoll

#4 Post by pullmoll »

klar ist es nicht direkt 10. der zählt ja hoch, das weiß ich ja. meine eigentliche frage war nur so gemeint, nachdem die bedingung geprüft wurde wird der wert ja inkrementiert. bei einem wert von 10 ist es also dann 11. dann kommt die print anweisung im anweisungsblock. in dem tutorial wurde die reihenfolge der abarbeitung in der schleife aber nicht erklärt.
die ist wie ich mittlerweile (eben) in einem anderen tutorial gesehen habe wie folgt.

Code: Select all

for &#40;ausdr.1; ausdr.2; ausdr.3&#41; &#123; Anweisung&#125;
1 wird nur am anfang ausgewertet dann nicht mehr.
2 wird dann immer beim nächsten schleifendurchgang ausgewertet.
dann kommt zuerst die Anweisung bevor 3 ausgwertet wird.
dann ist es ja klar warum ich kein 11 bekomme sondern nur 1 - 10.
also nicht 1-2-3 dann anweisung. woher soll man das auch wissen. jetzt weiß ich es.

pullmoll

#5 Post by pullmoll »

da warst du schneller als ich @chris :)

Post Reply