Skip to main content

5.1 For - Loops

In deze les gaan we kennismaken met loops in PHP. We leren wat een for-loop is en hoe we die in combinatie met arays kunnen toepassen.

In het onderstaande filmpje wordt de basis uitgelegd van hoe een for loop in werkt.

Loops (lus)

Een loop (in het Nederlands "lus") is een stuk code dat onder bepaalde voorwaarden uitgevoerd wordt. Zolang de voorwaarde waar (TRUE) is, wordt de code in de loop steeds opnieuw uitgevoerd. Als in de lus een variabele wordt aangepast, dan heeft deze variabele de nieuwe waarde bij de volgende keer dat de loop wordt uitgevoerd. Totdat de voorwaarde van de loop niet meer waar is. De voorwaarde moet zorgvuldig worden gekozen; een foutje kan er voor zorgen dat de loop niet meer stopt. Mocht dat toch gebeuren, dan zorgt PHP dat het script (standaard) na 30 seconden toch wordt gestopt.

De verschillende soorten lussen in PHP lijken op elkaar, alleen is steeds de voorwaarde anders opgebouwd. De while-lus is het meest eenvoudig, de for-lus is wat ingewikkelder en de foreach-lus is er speciaal voor het werken met arrays.

For Loop

For loops komen in alle programmeer talen voor. Een loop zorgt ervoor dat een stuk programma code X keer wordt uitgevoerd. De waarde van X hangt af van hoed e loop wordt geprogrammeerd. Eén van de meest gebruiken loops is de for -loop.

Dus een for-loop ziet er altijd als volgt uit:

for(lus- startwaarde ; lus-voorwaarde ; lus-teller) { lus-code }

In de for loop bepaal je in ieder geval een begin- en een eind waarde bijvoorbeeld 1 t/m 10. De loop wordt dan 10 x uitgevoerd. Bijvoorbeeld:

<?php
for($i=0; $i<10; $i++)
{
  echo "Hello<br>";
}
echo "Einde loop<br>";
?>

In de for loop staan drie statements:

$i=0; lus-startwaarde Dit is de startwaarde van de index $i
$i<10; lus-voorwaarde De loop gaat door zolang deze vergelijking true is, dit heet de voorwaarde
$i++; lus-teller Na elke iteratie (uitvoering van de code in het blok van de loop) wordt dit uitgevoerd.
{ ....} lus-code Deze code hoort bij de loop en wordt X keer uitgevoerd.

Dit gebeurt er stap voor stap:

Iteratie Wat gebeurt er?
1 $i=0

$i < 10 // als dit waar is voer dan de code uit anders ga door met de code na de loop

$i++ // $i wordt nu 1
2 $i < 10 // nog steeds waar dus voer de code die bij de loop hoort nog een keer uit.

$i++ //$i wordt nu 2
3 $i < 10 // nog steeds waar dus voer de code die bij de loop hoort nog een keer uit.

$i++ //$i wordt nu 3
... ...
9 $i < 10 // nog steeds waar dus voer de code die bij de loop hoort nog een keer uit.

$i++ //$i wordt nu 9
10 $i < 10 // NIET meer waar dus de code in de loop wordt niet meer uitgevoerd, de loop stopt!

Opdracht 1

Bepaal van elk van de volgende loops hoe vaak die wordt uitgevoerd.

for($i=0; $i<10; $i++)
for($i=1; $i<10; $i++)
for($i=0; $i<100; $i++)
for($i=1; $i<100; $i++)
for($k=0; $k<1; $k++)
for($k=1; $k<1; $k++)
for($i=10; $i>0; $i--)
for($i=10; $i>0; $i=$i-1)
for($i=10; $i<>4; $i--) // <> betekent 'ongelijk aan' != mag ook
for($i=2; $i; $i--) // denk aan wanneer $i true of false is
for($i=0; $i>0; $i++)
for($i=1; $i>0; $i++)

Schrijf van elke regel op hoe vaak de loop wordt uitgevoerd.

Opdracht 2a

Maak een klein programmaatje met een for-loop waarin alle even getallen tussen 0 en 1000 worden afgedrukt. De output wordt dus: 2, 4, 6, 8, 10 ,12 ,14 ,16, ......., 996, 998, 1000

Opdracht 2b

Maak een klein programmaatje met een for-loop waarin alle oneven getallen aflopend tussen 1000 en 800 worden afgedrukt. De output wordt dus: 999, 997, 995, 993, 991, 989, ....., 807, 805, 803, 801

Opdracht 3

Voer onderstaande code uit en verander deze code door de regels 4 t/m 15 met behulp een loop af te drukken.

Let op, je mag het array $maanden niet aanpassen.

<?php
$maanden = ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December']; 

echo 'Maand 1 is '.$maanden[0].'.<br />';
echo 'Maand 2 is '.$maanden[1].'.<br />';
echo 'Maand 3 is '.$maanden[2].'.<br />';
echo 'Maand 4 is '.$maanden[3].'.<br />';
echo 'Maand 5 is '.$maanden[4].'.<br />';
echo 'Maand 6 is '.$maanden[5].'.<br />';
echo 'Maand 7 is '.$maanden[6].'.<br />';
echo 'Maand 8 is '.$maanden[7].'.<br />';
echo 'Maand 9 is '.$maanden[8].'.<br />';
echo 'Maand 10 is '.$maanden[9].'.<br />';
echo 'Maand 11 is '.$maanden[10].'.<br />';
echo 'Maand 12 is '.$maanden[11].'.<br />';
?>

Opdracht 4a

In de loop kun je ook gebruik maken van de index-variabele $i. Bijvoorbeeld:

<?php
for($i=1; $i<11; $i++) {
  echo $i . " * 7 = " . ($i*7) . "<br>";
}
?>

$i wordt in deze code gebruikt om de tafel van 7 af te drukken.

Verander de bovenstaande code, zodat je een tafel van x kan afdrukken. Maar een variabele $x en geef die voor de loop een waarde. De tafel van $x wordt afgedrukt.

(Tip: vervang de 7 's in het voorbeeld met een variabele)

Opdracht 4b

Maak nu een form en vraag de gebruiker welke tafel die wilt afdrukken. Zorg er dan voor dat deze tafel wordt afgedrukt.

Stel de gebruiker geeft aan dat hij de tafel van 14 wil afdrukken, dan zou dit de output moeten worden:

1 X 14 = 14
2 X 14 = 28
3 X 14 = 42
4 X 14 = 56
5 X 14 = 70
6 X 14 = 84
7 X 14 = 98
8 X 14 = 112
9 X 14 = 126
10 X 14 = 140

Opdracht 5

Het programma hieronder bevat een fout.

<?php
$colors=array('black','red','white');

for($i=0; $i<=3; $i++) {
  echo $colors[$i]."<br>";
}
?>

De foutmelding is

Notice: Undefined offset: 3 in /Applications/XAMPP/xamppfiles/htdocs/test.php on line 5

Wat betekent "Undefined offset"? Schrijf in je eigen woorden op wat dit betekent en leg uit waarom deze code een foutmelding geeft.

Opdracht 6

$dagen=['maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag','zondag'];

a) Maak gebruik van een loop en van bovenstaand array en druk alle dagen van de week op de volgende manier af:

Het is maandag
Het is dinsdag
Het is woensdag
Het is donderdag
Het is vrijdag
Het is zaterdag
Het is zondag

Schrijf de php code op je antwoordenblad.

b) Maak gebruik van een loop en van bovenstaand array en druk alle dagen van de week op de volgende manier af:
(je mag het array $dagen niet aanpassen).

Dag 1 van de week is maandag
Dag 2 van de week is dinsdag
Dag 3 van de week is woensdag
Dag 4 van de week is donderdag
Dag 5 van de week is vrijdag
Dag 6 van de week is zaterdag
Dag 7 van de week is zondag

Tip: In de loop heb je de loop variabele die telt. Gebruik deze variabele om de nummers 0 t/m 6 af te drukken. Denk dan na hoe je van 0 t/m 6 naar 1 t/m 7 kan komen.

Schrijf de php code op je antwoordenblad

Opdracht 7

Kijk naar het volgende programmaatje

<?php
...
for( ; $i<=10 ; ) {
  echo "$i"."<br>";
  ...
}
?>

Deze for-loop heeft in dit voorbeeld alleen een voorwaarde, de startwaarde en de lus-teller zijn weggelaten. Dat mag, maar de loop werkt niet meer. Vul nu op de plaats van de puntjes code toe, zodat de loop op deze manier werkt en de getallen 0 t/m 10 afdrukt.

Gelukt? Je hebt nu eigenlijk een soort while-loop gemaakt en dat gaan we in de volgende les verder behandelen.

--