Hoofdstuk 5: Herhalingsstructuren - Lussen

← Terug naar overzicht

De for-lus

Een for-lus is de meest gebruikte lus in PHP wanneer je van tevoren weet hoe vaak je iets wilt herhalen. De for-lus heeft drie delen: initialisatie, voorwaarde en update.

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

Dit telt van 0 tot en met 4. De drie delen van de for-lus:

1. Initialisatie ($i = 0): Maak een telvariabele aan

2. Voorwaarde ($i < 5): Blijf herhalen zolang dit waar is

3. Update ($i++): Verhoog de telvariabele na elke iteratie

$i++ is een verkorte schrijfwijze voor $i = $i + 1. Je kunt ook $i += 1 gebruiken. Alle drie betekenen hetzelfde: verhoog $i met 1.

Oefening 1

Maak een for-lus die 5 keer herhaalt (van $i = 0 tot $i < 5). Echo in de lus de tekst "Hallo" gevolgd door <br>.

Jouw code:

Oefening 2

Maak een for-lus die van 1 tot en met 10 telt. Echo de waarde van $i gevolgd door <br> in elke iteratie.

Jouw code:

Oefening 3

Maak een for-lus die van 10 naar beneden telt tot 1 (inclusief). Echo de waarde van $i gevolgd door een spatie.

Jouw code:

Oefening 4

Maak een for-lus die de even getallen van 2 tot en met 20 toont. Gebruik stappen van 2. Echo elk getal gevolgd door <br>.

Jouw code:

Oefening 5

Maak een variabele $som met waarde 0. Maak een for-lus die van 1 tot en met 100 telt. Tel $i op bij $som. Echo na de lus "De som is: " gevolgd door $som.

Jouw code:

Oefening 6

De tafel van 7: maak een for-lus die van 1 tot en met 10 telt. Echo in elke iteratie "7 x ", dan $i, dan " = ", dan het resultaat van 7 * $i, gevolgd door <br>.

Jouw code:

Oefening 7

Maak een variabele $tafel met waarde 9. Maak een for-lus van 1 tot en met 10 die de tafel van $tafel toont. Echo per regel: $tafel, dan " x ", dan $i, dan " = ", dan het product, gevolgd door <br>.

Jouw code:

De while-lus

Een while-lus herhaalt code zolang een voorwaarde waar (true) is. Je gebruikt een while-lus als je niet precies weet hoe vaak de lus moet draaien.

<?php
$teller = 0;
while ($teller < 5) {
    echo $teller . "<br>";
    $teller++;
}
?>

Pas op voor oneindige lussen! Als je vergeet de teller te verhogen, blijft de voorwaarde altijd waar en loopt je programma vast. Zorg er altijd voor dat de voorwaarde op een gegeven moment false wordt.

Oefening 1

Maak een variabele $getal met waarde 1. Maak een while-lus die herhaalt zolang $getal <= 5. Echo $getal gevolgd door <br> en verhoog daarna $getal met 1.

Jouw code:

Oefening 2

Maak een variabele $saldo met waarde 1000. Maak een variabele $maanden met waarde 0. Maak een while-lus die herhaalt zolang $saldo > 0. Trek elke maand 150 af van $saldo en verhoog $maanden met 1. Echo na de lus "Na ", dan $maanden, dan " maanden is het saldo op.".

Jouw code:

Oefening 3

Simuleer een voorraadcheck. Maak $voorraad met een waarde van rand(1, 15). Maak $verkocht met waarde 0. Maak een while-lus die herhaalt zolang $voorraad > 0. Trek elke ronde 1 af van $voorraad en verhoog $verkocht met 1. Echo na de lus "Totaal verkocht: " gevolgd door $verkocht.

Jouw code:

Oefening 4

Maak een variabele $getal met waarde 1. Maak een while-lus die herhaalt zolang $getal <= 50. Als $getal deelbaar is door 5 (gebruik $getal % 5 == 0), echo dan $getal gevolgd door een spatie. Verhoog $getal altijd met 1.

Jouw code:

Oefening 5

Maak een variabele $waarde met waarde 1024. Maak een while-lus die herhaalt zolang $waarde >= 1. Echo $waarde gevolgd door <br>. Deel daarna $waarde door 2 (gebruik $waarde /= 2).

Jouw code:

De foreach-lus

Een foreach-lus gebruik je om door een array te lopen. PHP neemt automatisch elk element uit de array, zodat je geen teller of losse index nodig hebt.

<?php
$dagen = ["maandag", "dinsdag", "woensdag"];

foreach ($dagen as $dag) {
    echo $dag . "<br>";
}
?>

Bij een gewone array gebruik je foreach ($array as $item). Bij een associatieve array kun je ook de sleutel meenemen met foreach ($array as $key => $value).

Gebruik foreach als je alle elementen van een array wilt verwerken. Het is vaak duidelijker dan een for-lus en voorkomt fouten met verkeerde indexen.

Oefening 1

Maak een array $namen met de waarden "Ali", "Bo" en "Cleo". Gebruik een foreach-lus om elke naam te echoeen gevolgd door <br>.

Jouw code:

Oefening 2

Maak een array $punten met de waarden 8, 6, 9 en 7. Maak een variabele $totaal met waarde 0. Gebruik foreach om alle punten op te tellen. Echo daarna "Totaal: " gevolgd door $totaal.

Jouw code:

Oefening 3

Maak een associatieve array $student met "naam" => "Sam", "leeftijd" => 17 en "richting" => "Software Developer". Gebruik foreach met $key => $value om elke regel te tonen als sleutel: waarde<br>.

Jouw code:

Oefening 4

Maak een associatieve array $voorraad met "pennen" => 12, "schriften" => 4, "markers" => 0 en "gummen" => 7. Gebruik foreach om alleen producten te tonen waarvan de voorraad groter is dan 0. Echo per product naam: aantal<br>.

Jouw code:

De do-while-lus

Oefening 6

Maak een do-while lus. Stel $nummer in op 1. De lus moet $nummer echoeen gevolgd door <br>, daarna $nummer verhogen met 1. De lus herhaalt zolang $nummer <= 5.

Jouw code:

Het verschil tussen while en do-while: bij een while-lus wordt de voorwaarde EERST gecontroleerd (de code wordt misschien nooit uitgevoerd). Bij een do-while-lus wordt de code EERST uitgevoerd en DAARNA de voorwaarde gecontroleerd (de code wordt minstens 1 keer uitgevoerd).

Oefening 7

Maak een variabele $pogingen met waarde 0 en $doelGetal met waarde 7. Maak een do-while lus die $pogingen met 1 verhoogt en een willekeurig getal $gok genereert met rand(1, 10). De lus herhaalt zolang $gok != $doelGetal. Echo na de lus "Gevonden na " gevolgd door $pogingen en " pogingen".

Jouw code:

Break, Continue & Modulo

Met break stop je een lus voortijdig. Met continue sla je de rest van de huidige iteratie over en ga je door naar de volgende. De modulo-operator (%) geeft de rest na deling en is handig om deelbaarheid te controleren.

<?php
// break voorbeeld
for ($i = 0; $i < 100; $i++) {
    if ($i == 5) {
        break; // stop de lus bij 5
    }
    echo $i . " ";
}

// continue voorbeeld
for ($i = 0; $i < 10; $i++) {
    if ($i % 3 == 0) {
        continue; // sla veelvouden van 3 over
    }
    echo $i . " ";
}
?>

Oefening 1

Maak een for-lus van 1 tot en met 20. Gebruik break om de lus te stoppen zodra $i groter is dan 10. Echo $i gevolgd door een spatie in elke iteratie.

Jouw code:

Oefening 2

Maak een for-lus van 1 tot en met 20. Gebruik continue om getallen die deelbaar zijn door 3 over te slaan. Echo alle andere getallen gevolgd door een spatie.

Jouw code:

Oefening 3

Maak een for-lus van 1 tot en met 100. Echo alleen getallen die deelbaar zijn door zowel 3 als 5 (dus door 15). Gebruik continue om de rest over te slaan.

Jouw code:

Oefening 4

Maak een variabele $som met waarde 0. Maak een for-lus van 1 tot en met 1000. Tel $i op bij $som. Zodra $som groter is dan 100, stop de lus met break. Echo daarna "Gestopt bij i = " gevolgd door $i en ", som = " gevolgd door $som.

Jouw code:

Oefening 5

Filtering: maak een for-lus van 1 tot en met 30. Sla alle even getallen over met continue. Echo de oneven getallen. Bereken ook de som van alle oneven getallen in een variabele $som (start op 0). Echo na de lus "<br>Som oneven: " gevolgd door $som.

Jouw code:

Oefening 6

Maak een geneste lus die een HTML-tabel genereert van 5 rijen en 4 kolommen. Echo eerst "<table border='1'>". Maak een for-lus voor rijen ($rij van 1 tot 5) en daarbinnen een for-lus voor kolommen ($kolom van 1 tot 4). Echo per cel "<td>", dan $rij * $kolom, dan "</td>". Open en sluit <tr> tags per rij. Echo tot slot "</table>".

Jouw code:

Oefening 7

FizzBuzz in PHP! Maak een for-lus van 1 tot en met 30. Als $i deelbaar is door 3 EN 5, echo "FizzBuzz". Anders als deelbaar door 3, echo "Fizz". Anders als deelbaar door 5, echo "Buzz". Anders echo $i. Voeg na elk resultaat <br> toe.

Jouw code:

Oefening 8

Maak een geneste lus die de tafels van 1 tot en met 5 toont. De buitenste lus loopt van $tafel = 1 tot en met 5. Echo per tafel een kopje "<h3>Tafel van " gevolgd door $tafel en "</h3>". De binnenste lus loopt van $i = 1 tot en met 10 en echo per regel de vermenigvuldiging met het resultaat, gevolgd door <br>.

Jouw code:

Oefening 9

Maak een for-lus die een sterrenpatroon toont. De lus loopt van $rij = 1 tot en met 5. Per rij echo je $rij sterretjes (*). Gebruik een binnenste for-lus om het juiste aantal sterretjes te echoeen, gevolgd door <br> na elke rij. Het resultaat moet zijn: 1 ster op regel 1, 2 sterren op regel 2, enzovoort.

Jouw code:

Oefening 10

Maak een wachtwoordgenerator. Maak een string $tekens met waarde "abcdefghijklmnopqrstuvwxyz0123456789". Maak een variabele $wachtwoord als lege string. Gebruik een for-lus die 8 keer herhaalt. Pak elke iteratie een willekeurig teken met $tekens[rand(0, strlen($tekens) - 1)] en plak het aan $wachtwoord. Echo "Gegenereerd wachtwoord: " gevolgd door het wachtwoord.

Jouw code:

Oefening 11

Maak een complete HTML-prijslijst met geneste lussen. Maak een array $categorieen met de waarden "Budget", "Standaard" en "Premium". Maak een for-lus van $i = 0 tot count($categorieen). Per categorie echo je een <h3> met de categorienaam. Maak een binnenste for-lus van $maand = 1 tot en met 12 die per maand echo't: "Maand ", het maandnummer, ": EUR ", en een prijs berekend als ($i + 1) * 10 * $maand. Gebruik <br> na elke regel.

Jouw code:

Samenvatting

In dit hoofdstuk heb je geleerd: