PHPBoek();
6 Array's
Array is in het Nederlands het beste te vertalen als rij of lijst. Een array is een speciaal soort variabele. Daar waar een normale variabele precies één waarde kan bevatten, kan een array oneindig veel waarden bevatten. Arrays worden veelvuldig gebruikt in combinatie met lussen (hoofdstuk 13) en databases.
Op dit punt in het boek is er nog geen echte toepassing voor de array, maar het is wel belangrijk om te begrijpen wat een array is en hoe deze in elkaar zit, aangezien in de komende hoofdstukken een aantal door PHP gegenereerde arrays behandeld zullen worden.
Theorie
Sleutels en Waarden
Zoals vermeld kan een array meerdere waarden bevatten. Iedere waarde is gekoppeld aan een voor de array unieke sleutel. Deze sleutels worden gebruikt om een specifieke waarde uit de array af te kunnen lezen of te kunnen bewerken.
Een sleutel kan een integer of een string zijn, en mag zelf worden gekozen. Indien een waarde aan een array wordt toegevoegd zonder hier een sleutel bij op te geven, dan zal PHP automatisch de eerste vrije integer als sleutel toekennen.
Indien dus een array zonder specifieke sleutelwaarden gemaakt wordt, zal PHP de waarden automatisch nummeren. Belangrijk om hierbij in de gaten te houden is dat PHP in dit geval bij het getal nul zal beginnen te nummeren. De eerste waarde in de array heeft dus als sleutel het getal 0.
Hoe dit nu precies zit met die sleutels en waarden zal duidelijk worden in de volgende paragraaf.
Arrays met automatische sleutelnummering
Array aanmaken
Voor het maken van een array kan de functie array()
gebruikt worden.
$...
] )
Het resultaat van de functie array()
is uiteraard een variabele van het type array (zie ook tabel 1.1). Als parameter wordt een komma-gescheiden lijst van waarden die aan de array worden toegevoegd verwacht.
Wordt de parameter weggelaten, dan wordt er een lege array aangemaakt.
Indien een array zonder sleutelwaarden wordt gemaakt, dan volstaat een lijst met waarden:
PHP zal in deze gevallen de sleutels automatisch nummeren, zoals vermeld beginnend bij 0. In het fruit-voorbeeld krijgt appel sleutel 0, banaan sleutel 1 en citroen krijgt sleutel nummer 2. Het laatste sleutelnummer is dus één lager dan het aantal waarden in de array.
Waarden uitlezen
Om een waarde uit een array uit te kunnen lezen moet de sleutel worden gebruikt. Het uitlezen van een array gebeurt door de sleutel tussen rechte haken achter de variabele-naam van de array te plaatsen:
De echo
haalt in dit geval de banaan op uit de fruit-lijst.
Waarden wijzigen
Om een waarde in een array te wijzingen wordt eveneens de sleutel gebruikt. Hiermee kan de positie in de array eenvoudig gelijk worden gesteld aan een andere waarde:
In het fruit-voorbeeld is hiermee appel vervangen door aardbei.
Array uitbreiden
De notatie met haken kan ook gebruikt worden om een waarde aan een array toe te voegen. Aangezien dit tevens verreweg de meest eenvoudige manier is om een waarde aan een array toe te voegen, is dit tevens de enige manier om een waarde aan een array toe te voegen die in dit boek behandeld zal worden.
Het toevoegen van een waarde aan een automatisch genummerde array is vrijwel gelijk aan het wijzigen van een bestaande waarde. Het enige verschil is dat de sleutel nu wordt weggelaten. Door het weglaten van de sleutel weet PHP dat er een nieuwe waarde toegevoegd moet worden. De nieuwe waarde krijgt het eerstvolgende vrije sleutelnummer als sleutel:
In het fruit-voorbeeld krijgt druif hier sleutelnummer 3.
Array aanmaken: alternatieve methode
Deze laatste methode kan ook gebruikt worden om volledig nieuwe array's te maken, zonder gebruik te hoeven maken van de functie array()
. De fruit-array uit het voorbeeld kan ook als volgt worden gemaakt:
$fruit[] = 'banaan';
$fruit[] = 'citroen';
$fruit[] = 'druif';
Arrays met zelfgekozen sleutels
Array aanmaken
Ook voor array's met zelfgekozen sleutels kan de functie array()
gebruikt worden.
$...
] )
Ook in dit geval wordt een lijst met kommagescheiden gegevens verwacht, maar nu volstaat het niet meer om alleen de waarden die in de array gezet moeten worden op te geven. Nu moeten ook de sleutels worden gespecificeerd. Iedere waarde die in de array wordt ingevoegd krijgt nu de volgende vorm:
$sleutel
=> mixed $waarde
In PHP-code ziet dat er als volgt uit:
'sleutel1' => 'waarde1',
'sleutel2' => 'waarde2',
'sleutel3' => 'waarde3',
'...' => '...'
);
'jantje' => 'FHASSVAE',
'pietje' => 'DSFHEASD',
'keesje' => 'SJSAFSAE'
);
Nu zijn de sleutels dus niet automatisch genummerd, maar worden de waarden uit de 'eerste kolom' als sleutels gebruikt.
Waarden uitlezen
Het uitlezen van een array met zelfgekozen sleutels werkt hetzelfde als bij een automatisch genummerde array. Verschil is nu dat geen sleutelnummer maar de toegekende sleutelnaam moet worden gebruikt:
De echo geeft in dit geval het wachtwoord van gebruiker keesje weer.
Waarden wijzigen
Het wijzigen van een waarde in een array is ook nu weer vergelijkbaar met het uitlezen ervan:
In het gebruikers-voorbeeld wordt hiermee het wachtwoord van pietje gewijzigd.
Array uitbreiden
Het toevoegen van een waarde aan een array is nu iets anders. De sleutel kan nu immers niet worden weggelaten, want dan zal PHP een automatische nummering toekennen. In dit geval is het uitbreiden van een array hetzelfde als het wijzigen van een waarde: als de sleutel nog niet bestaat, wordt een nieuwe waarde toegevoegd en als de sleutel wel al bestaat wordt de bestaande waarde gewijzigd:
Hiermee wordt de gebruiker fritsje met bijbehorend wachtwoord aan de gebruikers-array toegevoegd.
Array aanmaken: alternatieve methode
De alternatieve methode voor het aanmaken van een array kan ook nu weer gebruikt worden:
$gebruikers['pietje'] = 'SAFHAEGS';
$gebruikers['keesje'] = 'SJSAFSAE';
$gebruikers['fritsje'] = 'AFGAEHSE';
Multidimensionale Array's
Een multidimensionale array kan gezien worden als "een array in een array". De regels voor dit soort array's zijn hetzelfde als voor enkelvoudige array's. Ook nu kunnen automatisch genummerde en zelf gekozen sleutels gecombineerd worden.
Het werken met multidimensionale array's is niet ingewikkelder dan het werken met enkelvoudige arrays: op de plek waar in een enkelvoudige array een waarde komt, komt nu een andere array te staan.
Array aanmaken
Hieronder zijn drie voorbeelden opgenomen waarin een multidimensionale array aangemaakt wordt. Alle voorbeelden leiden tot hetzelfde resultaat, maar laten zien op welke verschillende manieren met multidimensionale array's gewerkt kan worden.
Met array()
:
'fruit' => array('appel', 'banaan', 'citroen'),
'groente ' => array('asperge', 'broccoli', 'courgette')
);
Zonder array()
:
$eten['fruit'][] = 'banaan';
$eten['fruit'][] = 'citroen';
$eten['groente'][] = 'asperge';
$eten['groente'][] = 'broccoli';
$eten['groente'][] = 'courgette';
Of eventueel eerst gesplitst in twee losse array's om daarna samen te voegen in de array $eten
:
$groente = array('asperge', 'broccoli', 'courgette');
$eten = array(
'fruit' => $fruit,
'groente' => $groente
);
Waarden uitlezen en wijzingen
Het uitlezen van waarden uit een multidimensionale array is niet veel anders dan het uitlezen van een enkelvoudige array. In plaats van één sleutel worden nu meerdere sleutels achter elkaar opgegeven om zo de juiste waarden uit te lezen. Voor het wijzigen van een waarde geldt dit net zo.
Om nu de banaan uit de voorbeelden van de vorige paragraaf uit te lezen, gebruiken we:
Meer dan de juiste sleutels in de juiste volgorde zetten is het niet.
Array Functies
In deze paragraaf worden een aantal functies besproken die zo nu en dan van pas komen bij het werken met array's. Er worden op dit moment nog geen praktijkvoorbeelden gegeven van de toepassing van deze functies; deze komen vanzelf verderop in dit boek aan de orde. Deze paragraaf kan dan ook voornamelijk als naslag worden gezien waarbij de belangrijkste array-functies bij elkaar staan.
Waarden tellen
De functie count()
telt het aantal waarden in een array.
$array_or_countable
[, int $mode
= COUNT_NORMAL
] )
Als tussen haakjes alleen een array wordt opgegeven (de parameter), dan worden alleen de waarden van het eerste niveau geteld. Verder gaand op het voorbeeld $eten met hierin een array groente en een array fruit:
//geeft 2 als resultaat
Als we alle waarden in een multidimensionale array willen tellen, dan geven we het getal 1 als extra parameter mee (de zogenaamde mode):
//geeft 8 als resultaat
Controleren of waarde bestaat
Middels de functie in_array()
kan gecontroleerd worden of een bepaalde waarde in een array aanwezig is.
$needle
, array $haystack
[, bool $strict
= FALSE
] )
Deze functie zoekt dus naar een naald in een hooiberg en geeft TRUE
als de naald gevonden is en FALSE
als de gezochte waarde niet in de array aanwezig is. in_array()
kan alleen zoeken in een enkelvoudige array en niet in een meervoudige array:
//geeft $bestaat == FALSE
//geeft bestaat == TRUE
Controleren of sleutel bestaat
Zoals gecontroleerd kan worden of een waarde in een array aanwezig is, kan eveneens gecontroleerd worden of een bepaalde sleutel bestaat. Hiervoor wordt de functie array_key_exists()
gebruikt.
$key
, array $array
)
Als key wordt de naam van een sleutel gegeven waarnaar gezocht wordt in de array search. Als de sleutel wordt gevonden, wordt TRUE
gegeven en anders FALSE
.
//geeft $bestaat == TRUE
//geeft $bestaat == FALSE
Array sorteren
PHP kan de waarden in een array sorteren. De functie sort()
plaatst de waarden in een array van laag naar hoog. Tijdens dit proces worden alle sleutels verwijderd, waarna nieuwe automatisch genummerde sleutels worden toegevoegd. Gebruik deze functie dus niet op array's waarbij de precieze sleutels van belang zijn!
&$array
[, int $sort_flags
= SORT_REGULAR
] )
Variabelen verwijderen
Voordat een nieuwe array gemaakt wordt middels de methode met rechte haken, is het verstandig om er voor te zorgen dat deze array ook daadwerkelijk leeg is. Mocht er toevallig nog een array bestaan met dezelfde naam, dan wordt er immers iets toegevoegd in plaats van dat er een geheel nieuwe array gemaakt wordt. De functie unset()
verwijdert een variabele, en kan dus goed gebruikt worden om er zeker van te zijn dat een array ook echt leeg is.
$var
[, mixed $...
] )
De functie accepteert de namen van meerdere variabelen in één keer en geeft geen waarde als resultaat.
$fruit = array('appel', 'banaan', 'citroen');
//nu moet er een nieuwe array $fruit gemaakt worden, met andere waarden
$fruit[] = 'peer';
$fruit[] = 'kiwi';
$fruit[] = 'ananas';
//In plaats van een nieuwe array, is de oude array uitgebreid en bestaat nu uit de waarden appel, banaan, citroen, peer, kiwi en ananas.
//unset() kan er voor zorgen dat de rotte appels, bananen en citroenen eerst verwijderd worden
unset($fruit);
//nu een nieuwe array maken geeft het resultaat dat we verwachten: een array $fruit met 3 waarden
$fruit[] = 'peer';
$fruit[] = 'kiwi';
$fruit[] = 'ananas';
Een alternatieve methode om een array te wissen, in geval de variabele opnieuw als array gebruikt gaat worden, is om de variabele eerst gelijk te stellen aan een lege array:
$fruit = array();
//nu een nieuwe array maken geeft het resultaat dat we verwachten: een array $fruit met 3 waarden
$fruit[] = 'peer';
$fruit[] = 'kiwi';
$fruit[] = 'ananas';
Zelftest
- Een array is…
- …een variabele met meer dan één waarde.
- …een database.
- …een sleutel met bijbehorende waarde.
- …een sleutelvariabele.
- Met welk getal begint de automatische sleutelnummering? Kies het meest correcte antwoord.
- 0
- 1
- Met het eerstvolgende vrije sleutelnummer.
- Indien een waarde uit een array wordt uitgelezen, wordt de sleutel geschreven tussen?
- Gekromde haken ( )
- Rechte haken [ ]
- Accolades { }
- Puntige haken < >
- Een multidimensionale array is?
- Een array met zelf gekozen sleutels.
- Een array in meerdere opzichten.
- Een array met automatisch genummerde sleutels.
- Een array in een array.
- Waarom geeft het tweede voorbeeld in de paragraaf over
array_key_exists()
het resultaatFALSE
?$fruit
is een multidimensionale array waaruit de sleutels niet kunnen worden gelezen.- banaan is geen sleutel.
- De array is niet gesorteerd en dan kan
array_key_exists()
niet gebruikt worden. - Het voorbeeld geeft eigenlijk
TRUE
. Dat er staat datFALSE
als resultaat wordt gegeven is een fout in het boek.
Antwoorden
- a
- c
- b
- d
- b