Hoofdstuk 7: Array-functies & foreach

← Terug naar overzicht

De foreach-lus

De foreach-lus is speciaal gemaakt om door arrays te lopen. In tegenstelling tot een for-lus hoef je geen teller bij te houden - PHP doorloopt automatisch elk element.

<?php
// Geindexeerde array
$kleuren = ["rood", "groen", "blauw"];
foreach ($kleuren as $kleur) {
    echo $kleur . "<br>";
}

// Associatieve array met key => value
$product = ["naam" => "Laptop", "prijs" => 999];
foreach ($product as $key => $value) {
    echo $key . ": " . $value . "<br>";
}
?>

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

foreach is de meest gebruikte manier om door arrays te lopen in PHP. Het is veiliger dan een for-lus omdat je geen risico loopt op index-fouten. Gebruik foreach als standaard, tenzij je de index echt nodig hebt.

Oefening 1

Maak een array $dieren met "hond", "kat", "konijn" en "vis". Gebruik een foreach-lus om elk dier te echoeen, gevolgd door <br>.

Jouw code:

Oefening 2

Maak een array $prijzen met de waarden 19.95, 34.50, 12.00 en 45.99. Gebruik een foreach-lus om elk bedrag te tonen als "EUR " gevolgd door de prijs en <br>.

Jouw code:

Oefening 3

Maak een associatieve array $leerling met "naam" => "Emma", "leeftijd" => 17 en "klas" => "5VWO". Gebruik een foreach-lus met $key => $value om elk gegeven te tonen als: de key, ": ", de value, gevolgd door <br>.

Jouw code:

Oefening 4

Maak een array $scores met 72, 85, 91, 68 en 77. Gebruik een foreach-lus om de som te berekenen. Maak $som op 0 en tel elk element erbij op. Echo na de lus "Totaal: " gevolgd door de som en "<br>Gemiddelde: " gevolgd door het gemiddelde (som / count).

Jouw code:

Oefening 5

Maak een associatieve array $voorraad met: "brood" => 12, "melk" => 0, "kaas" => 5, "boter" => 0, "eieren" => 24. Gebruik een foreach-lus om alleen de producten te tonen die op voorraad zijn (waarde > 0). Echo per product de key, ": " en de value, gevolgd door <br>.

Jouw code:

Oefening 6

Maak een associatieve array $winkelvoorraad met 5 producten en hun aantallen. Enkele moeten een voorraad van minder dan 5 hebben. Loop door de array met foreach. Als de voorraad kleiner is dan 5, echo "BIJVULLEN: " gevolgd door de productnaam en " (nog " en het aantal en " over)<br>". Anders echo de productnaam en ": voldoende<br>".

Jouw code:

Oefening 7

Maak een multidimensionale array $leerlingen met 4 leerlingen (elk met "naam" en "cijfer"). Gebruik een foreach-lus om een HTML-tabel te genereren. Echo "<table border='1'>" en een header rij met <th>Naam</th><th>Cijfer</th><th>Status</th>. Loop door elke leerling: de status is "Voldoende" als het cijfer >= 5.5, anders "Onvoldoende". Sluit af met "</table>".

Jouw code:

Sorteren & Tellen

PHP heeft ingebouwde functies om arrays te sorteren en te tellen. Het is belangrijk het verschil te kennen tussen de sorteerfuncties.

<?php
// sort() - sorteert geindexeerd, verliest keys
$getallen = [5, 2, 8, 1];
sort($getallen);
// Resultaat: [1, 2, 5, 8]

// asort() - sorteert op value, behoudt keys
$leeftijden = ["Jan" => 25, "Lisa" => 19, "Tom" => 32];
asort($leeftijden);
// Resultaat: "Lisa" => 19, "Jan" => 25, "Tom" => 32

// arsort() - sorteert op value aflopend, behoudt keys
arsort($leeftijden);
// Resultaat: "Tom" => 32, "Jan" => 25, "Lisa" => 19
?>

Belangrijk verschil: sort() hernummert de indexen (keys gaan verloren). Gebruik sort() alleen voor geindexeerde arrays. Voor associatieve arrays gebruik je asort() (oplopend) of arsort() (aflopend) - deze behouden de keys.

Oefening 1

Maak een array $getallen met 42, 17, 8, 33, 25 en 91. Sorteer de array oplopend met sort(). Loop daarna met foreach door de array en echo elk getal gevolgd door een spatie.

Jouw code:

Oefening 2

Maak een array $namen met "Zara", "Anna", "Mohammed", "Bram" en "Lisa". Sorteer de array alfabetisch met sort(). Echo het eerste element na het sorteren (dat moet "Anna" zijn).

Jouw code:

Oefening 3

Maak een associatieve array $prijzen met "laptop" => 999, "muis" => 25, "monitor" => 350, "toetsenbord" => 75. Sorteer oplopend op prijs met asort(). Loop met foreach door de gesorteerde array en echo per item: de key, ": EUR ", de value, gevolgd door <br>.

Jouw code:

Oefening 4

Maak een associatieve array $scores met "Jan" => 72, "Lisa" => 95, "Tom" => 88, "Sara" => 64 en "Eva" => 91. Sorteer aflopend met arsort() zodat de hoogste score bovenaan staat. Echo een ranglijst: loop met foreach en gebruik een teller $positie (start op 1). Echo per persoon: de positie, ". ", de naam, " - ", de score, gevolgd door <br>. Verhoog $positie na elke iteratie.

Jouw code:

Oefening 5

Maak een array $temperaturen met 15, 22, 18, 30, 25, 12, 28. Sorteer de array met sort(). Echo "Laagste: " gevolgd door het eerste element, <br>, "Hoogste: " gevolgd door het laatste element. Gebruik count() om de index van het laatste element te bepalen.

Jouw code:

Oefening 6

Maak een associatieve array $voorraad met 5 producten en hun aantallen. Sorteer aflopend op voorraad met arsort(). Echo "<h3>Voorraad Overzicht (meest op voorraad eerst)</h3>". Loop met foreach en echo per product de naam, ": " en het aantal stuks, gevolgd door <br>. Echo ook het totaal aantal unieke producten met count().

Jouw code:

Zoeken in Arrays

PHP biedt handige functies om te controleren of een waarde of key bestaat in een array.

<?php
$kleuren = ["rood", "groen", "blauw"];

// Controleer of een waarde bestaat
if (in_array("groen", $kleuren)) {
    echo "Groen zit in de array!";
}

// Controleer of een key bestaat (voor associatieve arrays)
$product = ["naam" => "Laptop", "prijs" => 999];
if (array_key_exists("prijs", $product)) {
    echo "De key 'prijs' bestaat!";
}

// Array tonen voor debugging
print_r($kleuren);
?>

in_array() zoekt naar een WAARDE in de array. array_key_exists() zoekt naar een KEY (sleutel). Gebruik in_array() voor geindexeerde arrays en array_key_exists() wanneer je wilt weten of een bepaalde key aanwezig is in een associatieve array.

Oefening 1

Maak een array $fruit met "appel", "banaan", "kers", "druif" en "mango". Controleer met in_array() of "banaan" in de array zit. Zo ja, echo "Banaan gevonden!". Zo nee, echo "Banaan niet gevonden.".

Jouw code:

Oefening 2

Maak een array $toegestaan met "admin", "editor" en "moderator". Maak een variabele $rol met waarde "editor". Controleer met in_array() of de rol toegestaan is. Echo "Toegang verleend" of "Toegang geweigerd".

Jouw code:

Oefening 3

Maak een associatieve array $config met "database" => "mysql", "host" => "localhost" en "poort" => 3306. Controleer met array_key_exists() of de key "wachtwoord" bestaat. Echo "Wachtwoord is ingesteld" of "Wachtwoord ontbreekt!".

Jouw code:

Oefening 4

Zoekfunctie: maak een array $producten met "laptop", "tablet", "telefoon", "smartwatch" en "koptelefoon". Maak een variabele $zoekterm met waarde "tablet". Controleer met in_array() of het product bestaat. Echo een passende melding met een switch-statement: als gevonden, echo "Product gevonden: " gevolgd door de zoekterm. Als niet gevonden, echo "Product '" gevolgd door de zoekterm en "' niet in assortiment.".

Jouw code:

Oefening 5

Maak een associatieve array $voorraad met "appels" => 25, "bananen" => 0, "sinaasappels" => 12, "mango" => 0, "druiven" => 8. Loop met foreach door de array. Gebruik in_array() niet, maar check of de value gelijk is aan 0. Maak een teller $uitverkocht die bijhoudt hoeveel producten uitverkocht zijn. Echo na de lus "Aantal uitverkochte producten: " gevolgd door $uitverkocht.

Jouw code:

Oefening 6

Voorraadbeheer: maak een associatieve array $magazijn met 6 producten en aantallen. Loop met foreach door het magazijn. Als het aantal kleiner is dan 5, echo "[BIJVULLEN] ". Als het aantal 0 is, echo "[UITVERKOCHT] ". Anders echo "[OK] ". Voeg per product de naam en het aantal toe. Gebruik ook print_r() aan het einde om de volledige array te tonen.

Jouw code:

Oefening 7

Combineer alles: maak een multidimensionale array $producten met 4 producten (elk met "naam", "prijs" en "categorie"). Sorteer is niet nodig. Maak een variabele $zoekCategorie met waarde "Elektronica". Loop met foreach door de producten en echo alleen producten die bij die categorie horen. Gebruik $product["categorie"] == $zoekCategorie om te filteren. Echo per gevonden product de naam en prijs. Tel ook hoeveel producten gevonden zijn.

Jouw code:

Samenvatting

In dit hoofdstuk heb je geleerd: