Avatar billede drage Nybegynder
30. september 2001 - 02:35 Der er 23 kommentarer og
1 løsning

while løkke

Burder denne løkke ikke sige hej 3 gange ?

$sider = \"3\";
while($sider >= $i; $i++;) {
echo \"hej\";
}

Den siger parse error
Avatar billede stigc Nybegynder
30. september 2001 - 02:38 #1
$sider = 3;
$i= 1;

while($sider => $i;) {
echo \"hej\";
$i++;
}
Avatar billede morw Nybegynder
30. september 2001 - 02:57 #2
Du har nok tænkt på en FOR lykke:

for ($i = 1; $i <= 3; $i++) {
    print(\"Hej\");
}
Avatar billede coderdk Praktikant
30. september 2001 - 02:57 #3
$no = 3;
while ($i++ < $no)
  echo \"hej\";

eller

$no = 3;
for ($i=0;$i<$no;$i++)
  echo \"hej\";
Avatar billede razor Nybegynder
30. september 2001 - 02:58 #4
Jeg ville foretrække (rent performancemæssigt) at benytte for-løkken.
Avatar billede morw Nybegynder
30. september 2001 - 03:00 #5
razor> Nu har jeg ikke lavet en test på microtime o.s.v. men det må være en minimal forskel med mindre man har et ultra high load site.
Avatar billede roenving Novice
30. september 2001 - 03:02 #6
while kører indtil *een* betingelse bliver sand, den kan du så inde i løkken ændre, så den ikke bliver ved med at være sand, det er ikke en parameter !

Kig lidt på stigc\'s, morw\'s og coderdk\'s, så kan du forhåbentligt forstå, hvordan dissen løkke-muligheder skal benyttes -- ellers spørg igen ;·]
Avatar billede razor Nybegynder
30. september 2001 - 03:59 #7
morw, japs :) - men den er der. Det er vel også meget logisk. Med while løkken skal den checke hver eneste gang om et givent udtryk evaluerer sandt - med for-løkken kører den kun et foruddefineret antal gange.
Avatar billede myplacedk Nybegynder
30. september 2001 - 09:16 #8
razor >> Nope. For-løkken evaluerer ved hver gennemgang.
http://dk.php.net/for
\"In the beginning of each iteration, expr2 is evaluated.\"

Det er det, der gør PHPs \"for\"-løkke mere fleksibel, end Basics. I Basic (fx Visual Basic) kan en for-løkke ikke gøre andet, end at tælle fra ét tal til et andet. I PHP kan du gøre hvad du vil, selv om man plejer at lave sådan en tæller-ting.

/Niels Andersen
Avatar billede jelzin101 Praktikant
30. september 2001 - 09:18 #9
myplacedk>> i vb evalueres tællevariablen også hver gang. du kan altså godt ændre den i løkken.
Avatar billede myplacedk Nybegynder
30. september 2001 - 10:03 #10
jelzin101 >> Jaja, men du kan ikke gøre andet, end at tælle fra ét tal til et andet.

Du kan ikke gøre ting som dette:

for ($i=0, $j=0; $i<($j/2); $i++, $j+=$i)

Har ikke lige tjekket om det er syntaktisk korrekt, og det giver da slet ingen semantisk mening. Men ting i den stil kan lade sig gøre i PHP, det mener jeg ikke man kan ik VB.
Avatar billede jelzin101 Praktikant
30. september 2001 - 10:05 #11
jeg ved ikke helt hvad der er du gør dér :0) men man kan da godt bruge andre parametre end fra et tal til et andet.....
f.eks
for 0 to len(tekst) step 0.10
osv.
Avatar billede mortenfn Nybegynder
30. september 2001 - 10:22 #12
$sider=3;
$i=0;

while($sider<$i){
echo \"hej\";
$i++;
}
Avatar billede mortenfn Nybegynder
30. september 2001 - 10:23 #13
hov sådan

sider=3;
$i=0;

while($sider>$i){
echo \"hej\";
$i++;
}

min shift knap er løs
Avatar billede mortenfn Nybegynder
30. september 2001 - 10:24 #14
eller

for($i=0;$sider>$i;$i++;)echo \"hej\";
Avatar billede myplacedk Nybegynder
30. september 2001 - 11:12 #15
jelzin101 >>
Det jeg vil frem til er, at en for-løkke i PHP er tre udtryk, du kan skrive hvad du har lyst til.
I VB kan du kun \"steppe\". Så skal du lave en \"step 0\", og ændre din tæller inde i løkken. Right?
Min viden om VB er ret begrænset, jeg bryder mig slet ikke om sproget. :)

Men det er også ligemeget, det var bare en lille sidebemærkning. :)
Avatar billede morw Nybegynder
30. september 2001 - 12:24 #16
For lykken er i al fald hurtigst, og hvis man øger antallet af \"loops\" kan det da løbe op - meeen stadig en meget lille forskel.

En lille test: http://www.opgavestyring.dk/news/tid.php
Avatar billede myplacedk Nybegynder
30. september 2001 - 13:26 #17
Hmm...

FOR lykken tog 2.7145340442657 sekunder
WHILE lykken tog 1.8202069997787 sekunder
Forskel: -0.894327044487 sekunder

I øvrigt er forskellen i sekunder ligegyldigt, det er den FORHOLDSMÆSSIGE forskel der betyder noget.

$forskel = floor($time2/$time1*100).\'%\';
echo \"WHILE havde et tidsforbrug på $forskel i forhold til FOR\";
Prøv den i stedet.

Men jow, det ser da ud til at for-løkken generelt er hurtigst. :)
Avatar billede myplacedk Nybegynder
30. september 2001 - 13:27 #18
Hov, brug \"round\" i stedet for \"floor\". :)
Avatar billede morw Nybegynder
30. september 2001 - 15:24 #19
Så nu bliver det sjovt:

http://www.opgavestyring.dk/news/tid.php

While tager ca. 134 af den tid for bruger med 100000 loops

Meeen:

http://www.opgavestyring.dk/news/tid2.php

Hvis der kun er 10 loops tager while kun 30 procent af den tid FOR tager og while er dermed hurtigst

Vi kan nu prøve at finde grænseværdien hvor While er hurtigere end FOR. Men det bliver ikke lige i dag.
Avatar billede myplacedk Nybegynder
30. september 2001 - 18:18 #20
Jeg får vidt forskellige resultater hver gang jeg prøver.
Kan det passe at det ligger på et webhotel?

Mon ikke man skulle prøve på en maskine der ikke laver andet? :)
Avatar billede morw Nybegynder
30. september 2001 - 19:37 #21
Opgavestyring er hosted hos Uni2.

Selv om tiderne svinger lidt - ser man da tendensen.
Avatar billede myplacedk Nybegynder
30. september 2001 - 19:50 #22
Tjah, måske. Jeg synes nu de svinger RET meget. :)
Nogle gange er den ene over dobbelt så hurtig som den anden, andre gange er det omvendt.
Avatar billede drage Nybegynder
04. oktober 2001 - 23:49 #23
Fuck - sådan et lille spørgsmål og sådan en stor debat... er jo næsten helt stolt :)
Avatar billede roenving Novice
05. oktober 2001 - 00:55 #24
Jamen, det er jo næsten typisk for Eksperten.dk et *godt* spørgsmål tygges grundigt *S*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester