Arrays en loops in PHP vormen samen het hart van bijna elk PHP-script dat je ooit zult schrijven. Of je nu een lijst met producten toont, gebruikersgegevens verwerkt of data uit een database haalt: zonder arrays en loops kom je nergens. In dit artikel leer je hoe arrays werken, welke soorten er zijn en hoe je ze efficiënt doorloopt met loops.
We bouwen voort op wat je eerder leerde over variabelen, types en control flow in PHP. Heb je PHP nog niet geïnstalleerd? Lees dan eerst onze handleiding over PHP installatie en je eerste script.
Wat is een array in PHP?
Een array is een variabele die meerdere waarden tegelijk kan opslaan. In plaats van tien losse variabelen voor tien productnamen, gooi je ze in één array. Dat scheelt code en maakt je script veel flexibeler.
PHP kent één arraytype dat zich op drie manieren laat gebruiken: indexed (op nummer), associative (op naam) en multidimensional (genest). Dat is anders dan in talen als Java of C#, waar lijsten en dictionaries strikt gescheiden zijn.
<?php
$leeg = [];
$kleuren = ['rood', 'groen', 'blauw'];
$persoon = ['naam' => 'Sanne', 'leeftijd' => 32];
De korte notatie met vierkante haken [] werkt sinds PHP 5.4 en is tegenwoordig de standaard. De oude array() functie werkt nog steeds, maar je ziet hem in moderne codebases steeds minder.
Indexed arrays: lijsten met nummers
Een indexed array is een lijst waarbij PHP automatisch een numerieke sleutel toekent, beginnend bij 0. Je gebruikt ze voor opsommingen waarbij de volgorde belangrijk is en de positie geen betekenis heeft.
<?php
$dagen = ['maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag'];
echo $dagen[0]; // maandag
echo $dagen[2]; // woensdag
echo count($dagen); // 5
Je kunt elementen toevoegen met $dagen[] = 'zaterdag';. PHP plaatst die waarde dan op de volgende beschikbare index. Verwijderen doe je met unset($dagen[2]), maar pas op: de indexen worden niet automatisch hernummerd. Wil je dat wel, gebruik dan array_values() om de array opnieuw te indexeren.
Veelgebruikte functies voor indexed arrays
PHP heeft een enorm arsenaal aan ingebouwde array-functies. Een paar die je dagelijks gebruikt:
count($array), telt het aantal elementenin_array('waarde', $array), checkt of een waarde voorkomtarray_push($array, 'nieuw'), voegt toe aan het eindearray_pop($array), haalt het laatste element eruitsort($array), sorteert oplopendarray_reverse($array), keert de volgorde om
Een complete lijst vind je in de officiële PHP array-documentatie.
Associative arrays: sleutels met betekenis
Bij een associative array kies je zelf de sleutel. Dat maakt je code veel leesbaarder, vooral wanneer je werkt met gestructureerde data zoals een gebruikersprofiel of configuratie-opties.
<?php
$gebruiker = [
'naam' => 'Mark de Vries',
'email' => '[email protected]',
'leeftijd' => 28,
'actief' => true,
];
echo $gebruiker['email']; // [email protected]
Associative arrays zijn de basis van veel PHP-werk: API-responses, database-rijen en configuratie-bestanden komen vrijwel altijd binnen als associative arrays. Sinds PHP 8.1 kun je voor strikt getypeerde alternatieven kijken naar readonly properties of enums, maar voor losse data blijft de array het werkpaard.
Bestaande sleutels controleren
Voordat je een sleutel uitleest, is het slim om te controleren of die bestaat. Anders krijg je een notice (of in PHP 8+ een warning) en mogelijk een null.
<?php
if (isset($gebruiker['telefoon'])) {
echo $gebruiker['telefoon'];
}
if (array_key_exists('telefoon', $gebruiker)) {
echo 'Sleutel bestaat, maar waarde kan null zijn';
}
isset() retourneert false als de sleutel niet bestaat óf als de waarde null is. array_key_exists() kijkt puur naar het bestaan van de sleutel. Voor de meeste gevallen is isset() voldoende en sneller.
Multidimensional arrays: arrays in arrays
Soms heb je geneste data nodig, bijvoorbeeld een lijst met gebruikers waarbij elke gebruiker zelf weer een associative array is. Dat noem je een multidimensional array.
<?php
$gebruikers = [
['naam' => 'Sanne', 'rol' => 'admin'],
['naam' => 'Mark', 'rol' => 'editor'],
['naam' => 'Lisa', 'rol' => 'viewer'],
];
echo $gebruikers[1]['naam']; // Mark
Je kunt dit zo diep nesten als je wilt, maar pas op: hoe dieper de structuur, hoe lastiger je code te lezen is. Voor complexe datastructuren is het vaak beter om met objecten of classes te werken, een onderwerp voor een toekomstig artikel in deze serie.
Loops: arrays doorlopen
Een array op zichzelf is statisch. De magie ontstaat wanneer je elk element wilt verwerken. Daarvoor gebruik je een loop. PHP kent vier looptypes: for, while, do-while en foreach. Voor arrays is foreach veruit de populairste.
Foreach: de array-loop bij uitstek
Met foreach doorloop je elk element zonder dat je je druk hoeft te maken om indexen of tellers.
<?php
$kleuren = ['rood', 'groen', 'blauw'];
foreach ($kleuren as $kleur) {
echo $kleur . PHP_EOL;
}
Wil je naast de waarde ook de sleutel? Gebruik dan de uitgebreide syntax:
<?php
$gebruiker = ['naam' => 'Sanne', 'rol' => 'admin'];
foreach ($gebruiker as $sleutel => $waarde) {
echo "{$sleutel}: {$waarde}" . PHP_EOL;
}
Voor multidimensional arrays nest je gewoon meerdere foreach-loops:
<?php
foreach ($gebruikers as $gebruiker) {
echo $gebruiker['naam'] . ' is ' . $gebruiker['rol'] . PHP_EOL;
}
For: wanneer je een teller nodig hebt
De klassieke for-loop gebruik je wanneer je exact weet hoe vaak iets moet gebeuren of wanneer de index zelf een betekenis heeft (bijvoorbeeld voor wiskundige berekeningen).
<?php
for ($i = 1; $i <= 10; $i++) {
echo "Regel {$i}" . PHP_EOL;
}
De drie onderdelen zijn: initialisatie ($i = 1), conditie ($i <= 10) en stap ($i++). Zolang de conditie waar is, draait de loop door.
While en do-while: zolang iets waar is
Een while-loop draait zolang de voorwaarde waar is. Handig wanneer je niet vooraf weet hoe vaak de loop moet draaien, bijvoorbeeld bij het lezen van een bestand of een database-resultaat.
<?php
$teller = 0;
while ($teller < 5) {
echo $teller . PHP_EOL;
$teller++;
}
do-while lijkt erop, maar voert de code minimaal één keer uit voordat de voorwaarde wordt gecheckt. In de praktijk zie je dit zelden, maar het kan nuttig zijn voor invoer-validatie.
Loops sturen met break en continue
Soms wil je een loop voortijdig stoppen of een iteratie overslaan. Daarvoor zijn break en continue.
<?php
$nummers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
foreach ($nummers as $nummer) {
if ($nummer % 2 === 0) {
continue; // sla even getallen over
}
if ($nummer > 7) {
break; // stop helemaal
}
echo $nummer . PHP_EOL; // print 1, 3, 5, 7
}
continue springt naar de volgende iteratie. break stopt de loop volledig. Bij geneste loops kun je break 2 gebruiken om twee niveaus tegelijk te verlaten, handig, maar gebruik het spaarzaam: het maakt code snel verwarrend.
Arrays transformeren met array-functies
In plaats van zelf loops te schrijven, kun je vaak ingebouwde functies gebruiken die hetzelfde doen, maar korter en duidelijker.
<?php
$prijzen = [10, 20, 30, 40];
// Verdubbel elke prijs
$dubbele = array_map(fn($prijs) => $prijs * 2, $prijzen);
// Filter prijzen boven de 15
$duur = array_filter($prijzen, fn($prijs) => $prijs > 15);
// Tel alles bij elkaar op
$totaal = array_sum($prijzen);
array_map, array_filter en array_reduce vormen samen een functioneel trio dat je in moderne PHP-codebases overal terugziet. Ze zijn vaak leesbaarder dan een handgeschreven foreach-loop én voorkomen subtiele bugs zoals het vergeten te resetten van een teller.
Voor diepgaande informatie over functioneel programmeren in PHP raad ik PHP: The Right Way aan, een onmisbare resource voor elke serieuze PHP-developer.
Veelvoorkomende valkuilen
Een paar zaken waar beginners vaak over struikelen:
Modificeren tijdens een foreach. Wanneer je een array aanpast terwijl je er doorheen loopt, gebeuren er rare dingen. Gebruik &$waarde (referentie) bewust, en unset($waarde) na de loop om de referentie op te ruimen.
Vergelijken met == versus ===. Bij in_array() controleer je standaard met loose comparison. Voeg true toe als derde argument voor strikte vergelijking: in_array('1', $array, true).
Numerieke sleutels in associative arrays. Een sleutel als '0' (string) wordt door PHP automatisch omgezet naar 0 (integer). Dit kan onverwachte botsingen veroorzaken. Lees voor de details onze uitleg over variabelen en types in PHP.
Praktijkvoorbeeld: een productlijst verwerken
Laten we alles samenbrengen in een realistisch voorbeeld. Stel je hebt een lijst met producten en je wilt alleen de producten op voorraad tonen, gesorteerd op prijs.
<?php
$producten = [
['naam' => 'Toetsenbord', 'prijs' => 75, 'voorraad' => 12],
['naam' => 'Muis', 'prijs' => 25, 'voorraad' => 0],
['naam' => 'Monitor', 'prijs' => 250, 'voorraad' => 4],
['naam' => 'Webcam', 'prijs' => 60, 'voorraad' => 8],
];
$opVoorraad = array_filter($producten, fn($p) => $p['voorraad'] > 0);
usort($opVoorraad, fn($a, $b) => $a['prijs'] <=> $b['prijs']);
foreach ($opVoorraad as $product) {
echo "{$product['naam']}: € {$product['prijs']}" . PHP_EOL;
}
Drie regels code en je hebt een gefilterde, gesorteerde lijst. De <=> operator (spaceship) is sinds PHP 7 en retourneert -1, 0 of 1, perfect voor sorteervergelijkingen.
Veelgestelde vragen
Wat is het verschil tussen een indexed en associative array in PHP?
Een indexed array gebruikt numerieke sleutels (0, 1, 2) terwijl een associative array zelf gekozen string-sleutels gebruikt zoals 'naam' of 'email'. Beide zijn technisch gezien hetzelfde type in PHP, maar je gebruikt ze voor verschillende doeleinden.
Wanneer gebruik je foreach in plaats van for in PHP?
Gebruik foreach wanneer je elk element van een array wilt doorlopen zonder dat je een teller nodig hebt. Gebruik for wanneer je exact wilt bepalen hoe vaak een loop draait of als je de index nodig hebt voor berekeningen.
Wat doet de break statement in een PHP loop?
Met break stop je een loop direct, ongeacht of de voorwaarde nog waar is. Dit is handig wanneer je een specifieke waarde hebt gevonden en de rest van de array niet meer hoeft te doorlopen.
Kun je arrays in PHP nesten?
Ja, dat noem je multidimensional arrays. Een array kan andere arrays bevatten als waarden, waardoor je complexe datastructuren kunt opbouwen zoals tabellen of menustructuren met submenu's.
Wat is sneller: foreach of for in PHP?
In moderne PHP-versies (8.0+) is foreach meestal even snel of sneller dan for bij het doorlopen van arrays. Het verschil is in de praktijk verwaarloosbaar, dus kies de variant die het meest leesbaar is.
Aan de slag
Arrays en loops zijn de bouwstenen van vrijwel elke PHP-applicatie. Door ze te combineren met functies als array_map en array_filter schrijf je beknopte, leesbare code die doet wat je verwacht.
In het volgende deel van deze serie duiken we in functies en scope: hoe je herbruikbare codeblokken bouwt en waarom variabelen binnen en buiten functies anders werken. Wil je intussen je basiskennis opfrissen? Lees dan nog eens wat PHP precies is en waarom het nog steeds bestaat.