1.2.1 Assiociative Arrays
Herhaling Indexed array en Assiociative Array
Arrays zijn er in meerdere soorten. In deze les gaan we het hebben over associatieve arrays.
We hebben het al uitgebreid gehad over 'gewone' of 'eenvoudige' arrays in PHP. Deze 'gewone' arrays heten ook wel een indexed array omdat je de elementen via de index (0,1,2,3,4,5.....) kunt opzoeken.
Er bestaat nog een type array: het assiociative array (in Python heet dit een 'Dictionary'). Het wordt ook wel een key-value array genoemd. Het assiociative array lijkt veel op JSON. JSON is een bestandsformaat waarin je data kan opslaan. Je zou het een soort database kunnen noemen.
Andere namen | Hoe benader je een element? | Voorbeeld | |
Indexed Array | gewoon array, 1 dimensionaal array, eenvoudig array | via de index, die is altijd 0,1,2,3,4.... | $myArray[13] |
Assiociative Array | key-value array, Dictionary (Python), hash table | via de key, dit moet een unieke string zijn waarvan je zelf de waarde bepaald. | $myArray['james']; |
In het onderstaande filmpje wordt eerst nog een keer herhaald hoe een 'gewoon' array ook alweer werkt en vanaf 3'00'' in het filmpje wordt uitgelegd hoe een associative array in PHP werkt.
In dit filmpje wordt aan de hand van een ander voorbeeld hetzelfde uitgelegd in het Engels.
Indexed Array
Bij een indexed array heb je als index een nummer. Elk array element heeft een nummer, te beginnen met 0.
$age[0] = "35";
$age[1] = "37";
$age[2] = "43";
Je kunt dit array ook op een ander manier maken, weet je nog?
$age = array(35,37,43);
Het bovenstaande array heeft drie elementen: $age[0], $age[1] en age{2]. Het getal tussen de vierkante haken heet de index.
Associative Array
Stel dat je het array dat hierboven staat wilt gebruiken om de leeftijd van personen vast te leggen. $age[0] is de leeftijd van Peter, $age[1] is de leeftijd van Ben en $age[2] is de leeftijd van Joe.
$age[0] = "35";
$age[1] = "37";
$age[2] = "43";
Dit is wel wat onhandig want je moet nu onthouden dat de 0 bij Peter hoort, de 1 bij Ben en de 2 bij Joe. Dat kan anders!
Associative Array aanmaken
Met een assiociative array kun je de index vervangen door een key. En de key bestaat uit een string.
Bijvoorbeeld:
$age['Peter'] = "35";
$age['Ben'] = "37";
$age['Joe'] = "43";
Je kunt het array ook op een andere manier maken
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
Associative Uitlezen
echo $age['Ben'];
In plaats van de index bij een indexed array, gebruik je nu de key die je zelf hebt gemaakt.
Associative Veranderen
$age['Ben']=38;
Dit gaat ook hetzelfde als bij een indexed array. Hier gebruik je de key die jezelf hebt gemaakt voor het array.
Associative Uitbreiden
$age['Mirna']=28;
Je kunt een assiociative array eenvoudig uitbreiden door een nieuwe key te gebruiken. Je moet wel zeker weten dat de key nieuw is anders overschrijf je de oude waarde. Als in het voorbeeld $age['Mirna'] al bestond dan heb je de oude waarde nu overschreven met de nieuwe waarde. Een key kan dus maar één keer voorkomen.
Opgave 1, theorievragen
a) In het (Nederlandse) filmpje over associative arrays staat 'ma' => 8 waar staat de 'ma' voor en waar staat de 8 voor? Dus wat betekent de 'ma' (Maarten, of wat?) en wat is de 8; 8 peren, 8 kilo, 8-wat?
b) Waaruit bestaat een index bij een index array; uit een string of een getal?
c) Waaruit bestaat een key bij een assiociative array; uit een string of uit een getal?
d) Stel een indexed array bestaat uit drie elementen. Wat zijn de indexen die dan worden gebruikt in dit array?
e) Kan dezelfde key bij een assiociative array meer dan één keer voorkomen?
f) Kan de key bij een assiociative array uit een getal zijn?
Opgave 2
Op deze pagina staan van alle maanden van het jaar de normale gemiddelde temperatuur in Nederland vermeld. Zo kun je zien dat januari de koudste maand is met gemiddeld 3.1 graden en de warmste maand is juli met 17.9 graden.
a) Maar een assiociative array waarin van alle maanden van het jaar (januari, februari, etc.) de normale gemiddelde temperatuur staan. Je hoeft alleen het array te maken.
b) Gebruik het assiociative array dat je hebt gemaakt en druk de temperatuur af van de maand april.
Opgave 3
Begin met de volgende code
<?php
$places = array(
"Japan" => "Tokyo",
"Mexico" => "Mexico City",
"USA" => "New York City",
"India" => "Mumbai",
"Korea" => "Seoul",
"China" => "Shanghai",
"Nigeria" => "Lagos",
"Argentina" => "Buenos Aires",
"Egypt" => "Cairo",
"UK" => "London");
?>
- Maak code die het volgende afdrukt:
de hoofdstad van China is Shanghai
Hierbij moet de naam Shanghai worden opgezocht uit het array. Je code mag de naam Shanghai dus niet bevatten. - Bestudeer: https://www.w3schools.com/php/php_arrays_associative.asp en zoek uit hoe je een associative array kunt uitprinten met een loop. Maak dan code die met het array van hierboven het volgende uitprint. Gebruik daarvoor een loop.
De hoofdstad van Japan is Tokyo
De hoofdstad van Mexico is Mexico City
De hoofdstad van USA is New York City
De hoofdstad van India is Mumbai
De hoofdstad van Korea is Seoul
De hoofdstad van China is Shanghai
De hoofdstad van Nigeria is Lagos
De hoofdstad van Argentina is Buenos Aires
De hoofdstad van Egypt is Cairo
De hoofdstad van UK is London
Opgave 4
Gebruik het array dat je hebt gemaakt bij opgave 2a en druk de temperatuur van alle maanden af. Gebruik hiervoor een loop en zorg ervoor dat de output er als volgt uit ziet.
De normale gemiddelde temperatuur van januari in Nederland is 3.1 graden.
De normale gemiddelde temperatuur van februari in Nederland is 3.3 graden.
De normale gemiddelde temperatuur van maart in Nederland is 6.2 graden.
De normale gemiddelde temperatuur van april in Nederland is 9.2 graden.
De normale gemiddelde temperatuur van mei in Nederland is 13.1 graden.
De normale gemiddelde temperatuur van juni in Nederland is 15.6 graden.
De normale gemiddelde temperatuur van juli in Nederland is 17.9 graden.
De normale gemiddelde temperatuur van augustus in Nederland is 17.5 graden.
De normale gemiddelde temperatuur van september in Nederland is 14.5 graden.
De normale gemiddelde temperatuur van oktober in Nederland is 10.7 graden.
De normale gemiddelde temperatuur van november in Nederland is 6.7 graden.
De normale gemiddelde temperatuur van december in Nederland is 3.17graden.
--