Arrays
- Introductie op Arrays
- Associatieve arrays
- Samengestelde operatoren
foreach
- Meerdimensionale arrays
- Arrayfuncties
Introductie op Arrays
PHP kent uiteraard ook arrays, reeksen van variabelen die op de één of andere manier bij elkaar horen. Het grote verschil met bijvoorbeeld Processing en Java is dat er in één array verschillende typen van gegevens bewaard kunnen worden en dat aan een bestaande array zomaar items kunnen worden toegevoegd.
Om een lege array aan te maken:
$items = [];
Maar je kan een array ook aanmaken en meteen met gegevens vullen:
$landen = ['Nederland','Frankrijk','België','Duitsland'];
Een nieuw element toevoegen gaat met:
$landen[] = 'Italië';
Arrays hebben een index, een positie. Het eerste element heeft altijd index 0, het tweede 1 enzovoort. Als we de inhoud van een element van een array willen pakken doen we dit met de index.
echo $landen[2]; // Print België.
$landen[0] = 'Spanje'; // Vervangt Nederland door Spanje.
Met var_dump()
kunnen we als ontwikkelaars checken, welke gegevens in een array zitten.
var_dump($landen);
Associatieve arrays
In PHP bestaan er niet zomaar associatieve arrays, nee elke array is van nature een associatieve array.
Dat kan je duidelijk zien als je de volgende broncode draait:
$priemgetallen = [3, 5, 7, 11, 13, 17];
var_dump($priemgetallen);
In de browser zie je nu dat de index (0, 1, 2, 3) wordt weergegeven met een =>
.
Als je nu een nieuw item toe wilt voegen kan dat gewoon met een key in plaats van een index-getal.
$priemgetallen['volgende'] = 19;
Raar maar waar..
Je kan arrayelementen altijd opvragen met de sleutel (key) en een element met een begrip specificeren. Denk eens aan de courses SPAD en SPB. Je hebt een knop en wil de posities X en Y, de breedte en de hoogte en de tekst in één variabele opslaan.
Bij PHP kan dat:
$knop['posX'] = 100;
$knop['posY'] = 50;
$knop['breedte'] = 300;
$knop['hoogte'] = 70;
$knop['tekst'] = 'Start';
Het kan ook in één keer met een associatie operator: =>
$knop = [
'posX' => 100,
'posY' => 50,
'breedte' => 300,
'hoogte' => 70,
'tekst' => 'Start'
];
Voor het oproepen gebruik je de naam van de array plus de naam van de sleutel. Deze zet je tussen vierkante haakjes en aanhalingstekens. Wanneer je het wil verwerken binnen een string zijn er verschillende opties, zie hieronder:
$omvang = (2 * $knop['breedte']) + (2 * $knop['hoogte']);
/* Een string aanmaken met behulp van concatenatie. */
echo '<button>'. $knop['tekst'] . '</button>';
/* Met dubbele aanhalingstekens. */
echo "<button>$knop['tekst']</button>";
/* Met dubbele aanhalingstekens, arrayvariabele tussen accolades. */
echo "<button>{$knop['tekst']}</button>";
Een ander voorbeeld:
/* Een lijst met gegevens over een meubel. Per element wordt een key (sleutel, naam) aangemaakt */
$meubel['type'] = 'tafel';
$meubel['houtsoort'] = 'beuken';
$meubel['prijs'] = 287;
/* En hier een 2e lijst op een andere manier aangemaakt. */
$andermeubel = ['type' => 'kast', 'prijs' => 1788, 'houtsoort' => 'eiken'];
/* De waarde van een element kan via zijn key opgeroepen worden */
$html = '<h1>' . $meubel['type'] . '</h1>';
$html .= '<p>van: ' . $meubel['houtsoort'] . '<br>voor: € ';
$html .= number_format($meubel['prijs'], 2, ',', '.') ;
$html .= '</p>';
echo $html;
Hier wordt gebruik gemaakt van de samengestelde concatenatie operator: .=
De inhoud van de variabele links van de operator ($html
in het voorbeeld) wordt uitgebreid met de expressie rechts (een stuk tekst).
Er worden dus steeds stukken tekst erachter geplakt.
HTML-broncode is voor PHP gewoon tekst.
Samengestelde operatoren
Samengestelde operatoren zijn er voor tekst- en rekenkundige operaties.
operator | beschrijving |
---|---|
.= | tekst aan bestaande variabele toevoegen |
+= | de waarde rechts bij de variabele links op tellen en opslaan |
++ | een variabele met één verhogen (increment) |
-= | de waarde rechts van de variabele links aftrekken en opslaan |
-- | een variabele met één verminderen (decrement) |
*= | de variabele vermenigvuldigen met de waarde rechts en opslaan |
/= | de variabele links met de expressie rechts delen en opslaan |
%= | modulo op devariabele links met de expressie rechts en opslaan |
$getal = 0;
$tekst = '';
$getal += 10;
$getal --;
$getal %= 3;
$getal *= 133;
$getal ++;
$tekst .= 'Berekeningen <br>';
$tekst .= 'De uitkomst is: ' . $getal;
foreach
Soms willen we binnen een programma bedragen optellen, een reeks van gegevens langslopen en deze achter elkaar uitprinten of iets dergelijks.
Hiervoor hebben we zoiets als een for
-lus.
Maar arrays kunnen we ook met een foreach
-constructie langslopen.
Het principe: voor elk element uit de lijst, doe iets.
Het element krijgt de tijdelijke, lokale naam item
.
De syntax :
foreach ($lijst as $item) {
// Hier kan je nu iets doen met $item.
echo $item;
}
Voorbeeld met een simpele geïndexeerde array:
$overzicht = '';
// Dit is dan de `foreach`-statement.
foreach ($steden as $stad) {
$overzicht .= $stad . '<br>';
}
echo $overzicht;
Voorbeeld met een associatieve array, de sleutel wordt hier ook als variabele gebruikt:
$consumpties = [
'Bier' => 3.50,
'Spa rood' => 2.40,
'borrelnoten' => 4
];
$totaal = 0;
$bon = '';
// hieronder is `$consumptie` de key
// en `$prijs` de value
foreach ($consumpties as $consumptie => $prijs) {
$bon .= "$consumptie: $prijs<br>";
$totaal += $prijs;
}
echo $bon . "--------------------<br>Totaal: " . $totaal;
Meerdimensionale arrays
Arrays kunnen om meerdere dimensies worden uitgebreid. Een tweedimensionale array kan je je als een tabel voorstellen.
Hier een array met cijfers: per student (hier met studentennummer) wordt een reeks cijfers bijgehouden.
$cijfers = [];
$cijfers['123876'] = [7.6, 4.9, 6.0];
$cijfers['767476'] = [5.6, 4.9, 6.4, 7.2, 7.0];
$cijfers['322355'] = [8.6, 6.9, 7.4];
Een driedimensionale array kunnen we ons voorstellen als een kubus. We breiden ons voorbeeld van zonet met courses uit:
// een nieuwe rij cijfers voor student '123876' en het vak SPB.
$cijfers ['123876']['SPB'] = [9.0, 8.0];
// Hier worden bij de student '123876'op de rij van SPB nieuwe cijfers toegevoegd.
$cijfers ['123876']['SPB'][] = 7.2;
// Hier worden bij cijfers een student '886322' met zijn cijfers voor WT en SAQ aangemaakt.
$cijfers['886322'] = [
'WT' => [6.7, 5.8, 7.5],
'SAQ' => [7, 6.5]
];
Best complex allemaal! Het goede nieuws is dat als wij dit goed programmeren de computer het werk doet en we er verder geen omkijken naar hebben. Uiteraard moeten we wel de principes en de syntaxis goed kennen.
Hier nu nog het voorbeeld van de meubels waarbij alle meubels langsgelopen worden en per meubel de prijs bij het totaal geteld wordt.
$totaalprijs = '';
foreach ($meubels as $meubel) {
// Een `$meubel` heeft meerdere waardes. Wij willen de prijs.
$totaalprijs += $meubel['prijs'];
}
echo $totaalprijs;
Arrayfuncties
Ook voor arrays bestaan een groot aantal gespecialiseerde functies. Alle arrayfuncties en details over hoe ze gebruikt worden vind je op PHP.NET - Array Functions.
isset($array['sleutel'])
om te kijken of er een element met een bepaalde sleutel bestaat.count($array)
om het aantal elementen van een array te achterhalen.in_array('waarde', $array)
om te kijken of een waarde in de array voorkomt.sort($array)
om de waardes te sorteren.asort($array)
om een associatieve array op waardes te sorteren en de bijbehorende sleutels mee te geven.ksort($array)
om een associatieve array op de sleutels te sorteren.
De sorteerfuncties sorteren de bestaande array. Je hoeft niet het resultaat ervan ergens anders op te slaan.
En hier een paar voorbeelden:
$aantal = count($spelers); // Aantal elementen in array.
$aanwezig = in_array('Robben', $spelers); // Staat hij in de lijst?
sort($spelers); // Waardes sorteren.
$zangers = [
'Tabitha' => 'Foen-A-Foe',
'2Pac' => 'Shakur',
'Kanye' => 'West',
'Kurt' => 'Cobain',
'Lil' => 'Kleine'
];
asort($zangers); // op achternaam sorteren en de voornaam erbij houden
ksort($zangers); // op voornaam (sleutel-key) sorteren
array_slice()
Lees samen de documentatie van array_slice.
sort()
, ksort()
en asort()
Lees samen de documentatie:
sort
- ’gewone’ sorteerfunctie voor een array.ksort
- sorteer een array op basis van de key.asort
- sorteer een array op zonder de assocatie te veranderen.
count()
(~10 min.)
Lees nu in je eentje de documentatie van count
.
isset()
Lees nu in je eentje de documentatie van isset
.
Met isset
kan je dus kijken of iets in een array beschikbaar is.
Heel handig bijvoorbeeld als je op basis daarvan wilt handelen.
Bijvoorbeeld:
if (isset($films[0]) && isset($films[0]['title'])) {
echo <h1>$films[0]['title']</h1>
}
Of:
// Bestaat de sleutel `'opleiding'`?
$bestaat = isset($student['opleiding']);