Loopar

I denna lektionen får du lära dig hur looparna for och while fungerar i PHP.

I PHP finns det några olika sorters loopar. En av dem har du redan stött på, loopen foreach, som loopar igenom alla värden i en array. Nu ska du få lära dig ett par andra loopar.

for-loopen

for-loopen är en loop man använder för att låta en variabel gå över ett visst intervall, till exempel 1-5. Syntaxen för den ser ut såhär:

PHP - PHP: Hypertext Preprocessor
<?php // Loopen for(/*Startvärde*/; /*Villkor*/; /*Förändring*/){ // Kod som ska köras varje varv i loopen } ?>

Startvärdet är vanligtvis en simpel variabeltilldelning. Om vi vill att den ska loopa från 1 till 5 ska den starta på 1, och vi skriver helt enkelt $i = 1. Variabeln måste inte heta $i, du kan döpa den till vad du vill, men man brukar kalla den för $i.

PHP - PHP: Hypertext Preprocessor
<?php // Börja på 1 for($i=1; /*Villkor*/; /*Förändring*/){ // Kod som ska köras varje varv i loopen } ?>

Förändringen är vad som ska ändras efter att loopen kört ett varv. Någon förändring måste ske, annars får vi en oändlig loop! Om vi vill att loopen ska köra från 1 till 5 är det väldigt lovande att öka $i med 1. Då kan vi använda $i för att avgöra hur många varv loopen har gjort.

PHP - PHP: Hypertext Preprocessor
<?php // Öka $i med ett för varje varv loopen gör for($i=1; /*Villkor*/; $i++){ // Kod som ska köras varje varv i loopen } ?>

Villkoret avgör om loopen ska köra ett till varv eller om den inte ska köras mer alls. Om villkoret stämmer (blir sant) kör den ett varv till, annars kör den inte loopen några fler varv. Om vi vill att den ska loopa från 1 till 5 ska $i vara mindre än eller lika med 5, och vi använder jämförelseoperatorn "mindre än eller lika med" (<=), som vi stötte på i lektionen om villkorssatser.

PHP - PHP: Hypertext Preprocessor
<?php // Avbryt loopen då $i är större än 5 for($i=1; $i<=5; $i++){ // Kod som ska köras varje varv i loopen } ?>

Mellan måsvingarna på slutet av rad y och början på rad 8 skriver vi koden som ska köras varje varv loopen gör. Speciellt är att $i har ett nytt värde för varje varv (i det här fallet har den ökat med 1).

Nedan följer ett exempel på en loop som listar siffrorna 1 till 5.

PHP - PHP: Hypertext Preprocessor
<?php // Skriv ut en text innan loopen körs echo "Innan loopen!<br>\n": // Loopen for($i=1; $i<=5; $i++){ echo $i."<br>\n"; } // Skriv ut en text efter att loopen körts echo "Efter loopen!"; ?>
HTML - HyperText Markup Language
Innan loopen!<br> 1<br> 2<br> 3<br> 4<br> 5<br> Efter loopen!
Innan loopen!
1
2
3
4
5
Efter loopen!

Loopen ovan går från lägre till högre tal. Självklart kan man även åstadkomma det omvända, vilket görs i nedanstående kod.

PHP - PHP: Hypertext Preprocessor
<?php // Loopen for($i=20; 10<=$i; $i=$i-2){ echo $i."<br>\n"; } ?>
HTML - HyperText Markup Language
20<br> 18<br> 16<br> 14<br> 12<br> 10<br>
20
18
16
14
12
10

Denna loopen börjar på 20, och för varje gång loopen kört ett varv minskar den variabeln $i med 2. Den slutar att loopa när variabeln $i är mindre än 10.

Looparna ovan har i sina villkor använt sig av jämförelseoperatorn "mindre än eller lika med" (<=). Villkoret måste inte använda sig av denna operatorn, utan vilket vanligt booleanskt uttryck som helst går att använda här (precis som villkoret i en villkorssats).

while-loopen

while-loopen fungerar i stort sett på samma sätt som for-loopen, men den har bara ett villkor inom sina parenteser som avgör om loopen ska köras ett till varv eller om den inte ska köras mer alls, precis som villkoret i for-loopen. Syntaxen för den ser ut såhär:

PHP - PHP: Hypertext Preprocessor
<?php while(/*Villkor*/){ // Kör denna koden så länge villkoret är sant } ?>

Genom att själv lägga till ett startvärde innan loopen och en förändring i loopen kan man åstadkomma exakt samma sak med while-loopen som med for-loopen. Ett exempel på det är följande kod, som åstadkommer samma sak som i första exemplet med for-loopen.

PHP - PHP: Hypertext Preprocessor
<?php // Skriv ut en text innan loopen körs echo "Innan loopen!<br>\n": // Loopen $i = 1; // Startvärde while($i<=5){ // Villkor (inom parenteserna) echo $i."<br>\n"; $i++; // Förändring (ligger sist i loopen) } // Skriv ut en text efter att loopen körts echo "Efter loopen!"; ?>
HTML - HyperText Markup Language
Innan loopen!<br> 1<br> 2<br> 3<br> 4<br> 5<br> Efter loopen!
Innan loopen!
1
2
3
4
5
Efter loopen!

Nu undrar du kanske varför det finns två olika loopar (både for- och while-loopen) som gör samma sak? while-loopen ska egentligen inte användas på det här sättet, men man kan göra det. Om man ha en loop där ett tal ändrar värde för varje varv loopen gör bör man använda for-loopen. while-loopen bör man istället använda då man har ett villkor som inte har med ett tal att göra. Det är svårt att ge ett exempel på det med de kunskaper du har nu, men exempel på det kommer dyka upp i kommande lektioner.

Gå till nästa lektion, Egen funktion.