PHP ยท Les 5
Arrays
Indexed, associatieve en geneste arrays, array_push, array_map en filter ยท 25 min
Indexed arrays
Indexed arrays slaan waarden op met automatische numerieke sleutels (0, 1, 2, โฆ).
<?php
// Aanmaken
$kleuren = ["rood", "groen", "blauw"];
$cijfers = [1, 2, 3, 4, 5];
$gemixed = ["Jan", 20, true, null];
// Opvragen via index (begint bij 0)
echo $kleuren[0]; // rood
echo $kleuren[2]; // blauw
// Lengte
echo count($kleuren); // 3
// Toevoegen
$kleuren[] = "geel"; // Toevoegen aan het einde
array_push($kleuren, "wit"); // Zelfde effect
// Verwijderen
$laatste = array_pop($kleuren); // Verwijder & geef terug: "wit"
$eerste = array_shift($kleuren); // Verwijder vooraan: "rood"
array_unshift($kleuren, "zwart"); // Voeg vooraan toe
// Controleren
echo in_array("groen", $kleuren) ? "gevonden\n" : "niet gevonden\n";
echo array_search("groen", $kleuren); // Geeft de index terug
โ ๏ธ Let op verschil met JS
PHP-arrays zijn vergelijkbaar met JS-arrays. Groot verschil: PHP heeft losse functies (array_push(), count()), terwijl JS methoden heeft (.push(), .length). In PHP is count() een functie, geen property.
Associatieve arrays
Associatieve arrays gebruiken string-sleutels in plaats van numerieke indices. Ze zijn vergelijkbaar met JS-objecten.
<?php
// Aanmaken
$gebruiker = [
"naam" => "Jan de Vries",
"leeftijd" => 20,
"email" => "jan@example.com",
"actief" => true,
];
// Opvragen
echo $gebruiker["naam"]; // Jan de Vries
echo $gebruiker["leeftijd"]; // 20
// Toevoegen / wijzigen
$gebruiker["stad"] = "Amsterdam";
$gebruiker["leeftijd"] = 21;
// Verwijderen
unset($gebruiker["actief"]);
// Sleutels en waarden
$sleutels = array_keys($gebruiker);
$waarden = array_values($gebruiker);
print_r($sleutels);
// Controleren of sleutel bestaat
if (array_key_exists("email", $gebruiker)) {
echo "Email: " . $gebruiker["email"] . "\n";
}
// isset() โ ook bruikbaar (false als null)
if (isset($gebruiker["stad"])) {
echo "Stad: " . $gebruiker["stad"] . "\n";
}
โ ๏ธ Let op verschil met JS
In JS gebruik je objecten ({}) voor key-value paren en arrays ([]) voor lijsten. In PHP is het allemaal รฉรฉn array-type. $obj["key"] is in PHP hetzelfde als obj.key in JS.
๐ Komt terug in Symfony
Symfony's Request-object heeft parameters als associatieve arrays: $request->query->all() geeft een array van GET-parameters terug. Doctrine-query resultaten zijn arrays van Entity-objecten.
Handige array-functies
<?php
$nummers = [5, 2, 8, 1, 9, 3];
// Sorteren
sort($nummers); // Oplopend: [1,2,3,5,8,9]
rsort($nummers); // Aflopend
asort($assoc); // Associatief sorteren (behoudt sleutels)
ksort($assoc); // Op sleutel sorteren
// Slice en splice
$deel = array_slice($nummers, 1, 3); // [2, 3, 5] (start, lengte)
array_splice($nummers, 1, 2); // Verwijder 2 elementen op index 1
// Samenvoegen
$a = [1, 2];
$b = [3, 4];
$samengevoegd = array_merge($a, $b); // [1, 2, 3, 4]
// Unieke waarden
$dubbel = [1, 2, 2, 3, 3, 3];
$uniek = array_unique($dubbel); // [1, 2, 3]
// Omkeren
$omgekeerd = array_reverse($nummers);
// Sommen
echo array_sum([1, 2, 3, 4]); // 10
echo max([1, 5, 3]); // 5
echo min([1, 5, 3]); // 1
// Doorzoeken
$pos = array_search(8, $nummers); // Geeft index terug of false
var_dump(in_array(8, $nummers)); // bool(true/false)
array_map, array_filter en array_reduce
<?php
$nummers = [1, 2, 3, 4, 5, 6, 7, 8];
// array_map โ transformeer elk element
$verdubbeld = array_map(fn($n) => $n * 2, $nummers);
print_r($verdubbeld); // [2, 4, 6, 8, 10, 12, 14, 16]
// array_filter โ filter elementen (behoudt sleutels!)
$even = array_filter($nummers, fn($n) => $n % 2 === 0);
print_r($even); // [1=>2, 3=>4, 5=>6, 7=>8]
// array_values() na filter om sleutels te resetten
$even = array_values($even); // [2, 4, 6, 8]
// array_reduce โ reduceer naar รฉรฉn waarde
$som = array_reduce($nummers, fn($carry, $item) => $carry + $item, 0);
echo "Som: $som\n"; // 36
// Combineren โ alle functies samen
$resultaat = array_reduce(
array_filter(
array_map(fn($n) => $n * 2, $nummers),
fn($n) => $n > 8
),
fn($carry, $item) => $carry + $item,
0
);
echo "Resultaat: $resultaat\n"; // Som van verdubbelde nummers > 8
โ ๏ธ Let op verschil met JS
In JS: arr.map(fn), arr.filter(fn), arr.reduce(fn, init) โ methoden op het array-object. In PHP zijn het losse functies: array_map(fn, arr). Let op de volgorde van argumenten: bij array_map staat de functie eerst, dan de array. Bij array_reduce staat de array eerst.
Geneste arrays
<?php
// Array van arrays โ zoals tabelrijen
$producten = [
["id" => 1, "naam" => "Laptop", "prijs" => 899.99, "voorraad" => 5],
["id" => 2, "naam" => "Muis", "prijs" => 24.99, "voorraad" => 50],
["id" => 3, "naam" => "Monitor", "prijs" => 349.00, "voorraad" => 0],
["id" => 4, "naam" => "Toetsenb","prijs" => 59.99, "voorraad" => 12],
];
// Opvragen
echo $producten[0]["naam"]; // Laptop
echo $producten[1]["prijs"]; // 24.99
// Loop
foreach ($producten as $product) {
$status = $product["voorraad"] > 0 ? "โ op voorraad" : "โ uitverkocht";
printf("%-12s โฌ%-8.2f %s\n",
$product["naam"], $product["prijs"], $status);
}
// Filteren โ alleen op voorraad
$beschikbaar = array_filter($producten, fn($p) => $p["voorraad"] > 0);
// Sorteren op prijs (usort met eigen vergelijkingsfunctie)
usort($producten, fn($a, $b) => $a["prijs"] <=> $b["prijs"]);
echo "\nGoedkoopste: " . $producten[0]["naam"] . "\n";
๐ Komt terug in Symfony
In Symfony geeft Doctrine normaal objecten terug (Entity-instanties) in plaats van arrays. Maar het patroon โ een collectie van items door itereren, filteren en mappen โ is exact hetzelfde. Arrays van arrays hier, arrays van Product-objecten in Symfony.
Sandbox
Filter en verwerk de productlijst met array-functies.
// output
Klik op Uitvoeren...
Kennischeck
Les 5 afronden
Ga door naar functies โ