Tutorials
Arrays
Dit artikel kan je beschouwen als een volledige handleiding voor arrays. Alles is uitgelegd op een zo eenvoudige mogelijke wijze. Aan het einde van de handleiding zit een lijst met veelgebruikte functies i.v.m. arrays.
Pagina 1
Inleiding
Dit is mijn eerste handleiding/tutorial over arrays en je zal naarmate je de handleiding leest alles leren wat je moet weten over arrays. Deze handleiding is geschikt voor zowel beginners als gevorderden (dan wel als naslagwerk).
[size=20]Wat zijn arrays?[/size]
Een array is een gegevensstructuur waarin je meerdere variabelen of parameters kunt opslaan. Arrays zijn belangrijk voor alle gegevens die de vorm hebben van een tabel. Het resultaat van een query uit een database heeft meerstal de vorm van een array. Je kan met arrays een complete database gestuurde webapplicatie maken zonder database. Dit zal je bij het lezen van dit artikel wel duidelijk worden.
Een array is dus een datatype (net zoals boolean, integer, float, string,... ). Een array is net zoals if, while,.. geen functie. Meer info i.v.m. datatypes kan je vinden op www.php.net.
Je hebt 2 soorten arrays: [color=green]associatieve en geïndexeerde arrays[/color]. PHP kent geen strikt onderscheid tussen deze 2 maar een associatieve array gebruikt strings (alfanumerieke waarde bv. tommy) en een geïndexeerde array maakt gebruik van integers (geheel getal bv. 12). PHP kent geen onderscheid tussen deze 2 omdat je beide vormen kunt combineren in één array.
<?php
// geïndexeerde arrays
$array = array ('thomas', 'verbeke'); // (#1)
$array = array (0 => 'thomas', 1 => 'verbeke'); // (#2)
$array = array (1 => 'thomas', 2 => 'verbeke'); // (#3)
$array = array (3 => 'thomas', 'verbeke'); // (#4)
?>
// associatieve arrays
$users = array( 'voornaam' => 'thomas' , 'achternaam' => 'verbeke'); // #5
Arrays worden standaard geïndexeerd vanaf 0 (integer), de eerste parameter of variabele krijgt dus de index 0 (zie voorbeeld). In dit voorbeeld krijgt 'thomas' dus de index 0 toegewezen en 'verbeke' de index 1. Je kan 'thomas' zelf een index aanwijzen met de operator '=>'. Voorbeeld #1 is gelijk aan voorbeeld #2 omdat bij het eerste voorbeeld 'thomas' ook al 0 had als index (meerv. = indices). Bij voorbeeld #3 krijgt 'thomas' de index 1 toegewezen en 'verbeke' de index 2. De telling voor de indexen na verbeke wordt verder gezet vanaf het laatste toegewezen nummer. In voorbeeld #4 krijgt 'verbeke' dus de index 4 toegewezen.
Bij associatieve arrays word er dus een letter of woord toegewezen aan het element. In voorbeeld #5 is 'thomas' dus de voornaam en 'verbeke' de achternaam.
Een andere mogelijkheid om een array te maken is via een directe toewijzing zoals in volgend stukje code word aangegeven.
<?php
// $user[0] kan evengoed $array[0] heten.
$user[0] = "Dit is een array";
// of
$user[] = 'Dit is ook een array zonder index';
?>
Nu zou je moeten weten hoe je een array kunt herkennen en definiëren of vormen. In het volgende hoofdstuk zullen we meer doen met controlestructuren met arrays.
[size=20]Wat zijn arrays?[/size]
Een array is een gegevensstructuur waarin je meerdere variabelen of parameters kunt opslaan. Arrays zijn belangrijk voor alle gegevens die de vorm hebben van een tabel. Het resultaat van een query uit een database heeft meerstal de vorm van een array. Je kan met arrays een complete database gestuurde webapplicatie maken zonder database. Dit zal je bij het lezen van dit artikel wel duidelijk worden.
Een array is dus een datatype (net zoals boolean, integer, float, string,... ). Een array is net zoals if, while,.. geen functie. Meer info i.v.m. datatypes kan je vinden op www.php.net.
Je hebt 2 soorten arrays: [color=green]associatieve en geïndexeerde arrays[/color]. PHP kent geen strikt onderscheid tussen deze 2 maar een associatieve array gebruikt strings (alfanumerieke waarde bv. tommy) en een geïndexeerde array maakt gebruik van integers (geheel getal bv. 12). PHP kent geen onderscheid tussen deze 2 omdat je beide vormen kunt combineren in één array.
<?php
// geïndexeerde arrays
$array = array ('thomas', 'verbeke'); // (#1)
$array = array (0 => 'thomas', 1 => 'verbeke'); // (#2)
$array = array (1 => 'thomas', 2 => 'verbeke'); // (#3)
$array = array (3 => 'thomas', 'verbeke'); // (#4)
?>
// associatieve arrays
$users = array( 'voornaam' => 'thomas' , 'achternaam' => 'verbeke'); // #5
Arrays worden standaard geïndexeerd vanaf 0 (integer), de eerste parameter of variabele krijgt dus de index 0 (zie voorbeeld). In dit voorbeeld krijgt 'thomas' dus de index 0 toegewezen en 'verbeke' de index 1. Je kan 'thomas' zelf een index aanwijzen met de operator '=>'. Voorbeeld #1 is gelijk aan voorbeeld #2 omdat bij het eerste voorbeeld 'thomas' ook al 0 had als index (meerv. = indices). Bij voorbeeld #3 krijgt 'thomas' de index 1 toegewezen en 'verbeke' de index 2. De telling voor de indexen na verbeke wordt verder gezet vanaf het laatste toegewezen nummer. In voorbeeld #4 krijgt 'verbeke' dus de index 4 toegewezen.
Bij associatieve arrays word er dus een letter of woord toegewezen aan het element. In voorbeeld #5 is 'thomas' dus de voornaam en 'verbeke' de achternaam.
Een andere mogelijkheid om een array te maken is via een directe toewijzing zoals in volgend stukje code word aangegeven.
<?php
// $user[0] kan evengoed $array[0] heten.
$user[0] = "Dit is een array";
// of
$user[] = 'Dit is ook een array zonder index';
?>
Nu zou je moeten weten hoe je een array kunt herkennen en definiëren of vormen. In het volgende hoofdstuk zullen we meer doen met controlestructuren met arrays.
Pagina 2
Controlestructuren met arrays
opmerking : Ik heb de gewoonte om de operator . te vervangen door , in mijn strings zoals je uit onderstaande voorbeelden zult kunnen vernemen. Meestal wordt dit echter niet gedaan maar het is niet fout. De output is dan ook dezelfde. (, werkt alleen met echo ! niet met print)
<?php
$voorbeeld_1 = 'peren';
$voorbeeld_2 = 'bananen';
// mijn manier
echo $voorbeeld_1, ' en ', $voorbeeld_2, ' zijn beide strings <br>';
// de meest gebruikte manier
echo $voorbeeld_1 .' en '. $voorbeeld_2 .' zijn beide strings';
?>
Voor ik begin met het loopen van de arrays wil ik nog vlug even tonen hoe je de waarden uit arrays kunt ophalen al hoewel dit zou moeten duidelijk zijn uit de voorbeelden bij de controlestructuren.
<?php
$users = array ( 1 => 'thomas' , 2 => 'david');
echo $users[1]; // output = thomas
print $users[2]; // output = david
echo $users[1], "<br>", $users[2], ': '; // met de , kan je " openen voor html
?>
Eerst wil ik het hebben over de meest gebruikte controle structuur en dat is natuurlijk foreach. Deze zal één voor één alle elementen uit een array halen. Een ander voordeel is dat deze constructie voor zowel geïndexeerde arrays werkt als voor associatieve arrays. (foreach is uitsluitend voor arrays).
Foreach voert een expressie uit voor elk element in de array die u opgeeft met $array_1 in dit geval. Bij elke iteratie (herhaling) is de waarde van het huidige element in de array beschikbaar in een variabele met de naam $waarde. Het verschil tussen de eerste en de tweede variant is dat bij de tweede variant ook de index of key van het huidige element beschikbaar is in de variabele die u instelt met $user_gegevens of $user_id en $user_gegevens. $user_id en $user_gegevens zijn dus 2 variabelen die u zelf kiest. Als je niet begrijpt wat ik bedoel dan moet je maar eens goed kijken naar de code en de output in je browser.
Opmerking: ik zij hierboven dat een iteratie = herhaling maar dat is in feite onjuist. Als een lus 2 keer wordt uitgevoerd, zijn dat namelijk 2 iteraties en maar één herhaling.
Ik hoop dat deze uitleg over foreach duidelijk genoeg is anders moet je dit hier onder maar even melden en dan pas ik hem wel aan.
Een andere ook veelgebruikte controle structuur bij arrays is natuurlijk de zogenaamde for-loop. Deze telt tussen 2 waarden die jij opgeeft (meer info op php.net). Je kan dit echter alleen gebruiken voor een geïndexeerde array wat ook logisch is als je een beetje nadenkt. Als je al een for-loop hebt gebruikt dan zul je wel weten dat je moet opgeven wanneer de loop moet stoppen of met andere woorden vanaf welk getal word de loop beëindigd. Daarvoor gebruiken we de functie count ().
$num is gewoon een variabele ik had evengoed numElementen kunnen kiezen. De $i++ zorgt ervoor dat na elke lus $i met één wordt verhoogd. De output lijkt me logisch: thomas vincent, david, veronique.
De belangrijkste controle structuren die IK het meeste gebruik zijn uitgelegd. Je kunt me altijd een pm zenden voor aanvullende info.
<?php
$voorbeeld_1 = 'peren';
$voorbeeld_2 = 'bananen';
// mijn manier
echo $voorbeeld_1, ' en ', $voorbeeld_2, ' zijn beide strings <br>';
// de meest gebruikte manier
echo $voorbeeld_1 .' en '. $voorbeeld_2 .' zijn beide strings';
?>
Voor ik begin met het loopen van de arrays wil ik nog vlug even tonen hoe je de waarden uit arrays kunt ophalen al hoewel dit zou moeten duidelijk zijn uit de voorbeelden bij de controlestructuren.
<?php
$users = array ( 1 => 'thomas' , 2 => 'david');
echo $users[1]; // output = thomas
print $users[2]; // output = david
echo $users[1], "<br>", $users[2], ': '; // met de , kan je " openen voor html
?>
<?php
// definiëren van de array
$array_1 = array( 'voornaam' => 'thomas' , 'achternaam' => 'verbeke' , 'leeftijd' => 16 , 'beroep' => 'student');
// de gegevens uit de array halen a.d.h.v. foreach () (manier 1) (#1)
foreach ($array_1 as $user_gegevens) {
echo $user_gegevens, "<br>";
}
// html tags voor white space
echo "<br><br>";
// de gegevens uit de array halen a.d.h.v. foreach () (manier 2) (#2)
foreach ($array_1 as $user_id => $user_gegevens) {
echo $user_id, ": " ,$user_gegevens, "<br>";
}
?>
Eerst wil ik het hebben over de meest gebruikte controle structuur en dat is natuurlijk foreach. Deze zal één voor één alle elementen uit een array halen. Een ander voordeel is dat deze constructie voor zowel geïndexeerde arrays werkt als voor associatieve arrays. (foreach is uitsluitend voor arrays).
Foreach voert een expressie uit voor elk element in de array die u opgeeft met $array_1 in dit geval. Bij elke iteratie (herhaling) is de waarde van het huidige element in de array beschikbaar in een variabele met de naam $waarde. Het verschil tussen de eerste en de tweede variant is dat bij de tweede variant ook de index of key van het huidige element beschikbaar is in de variabele die u instelt met $user_gegevens of $user_id en $user_gegevens. $user_id en $user_gegevens zijn dus 2 variabelen die u zelf kiest. Als je niet begrijpt wat ik bedoel dan moet je maar eens goed kijken naar de code en de output in je browser.
// output uit voorbeeld #1
thomas
verbeke
16
student
// output uit voorbeeld #2
voornaam: thomas
achternaam: verbeke
leeftijd: 16
beroep: student
Opmerking: ik zij hierboven dat een iteratie = herhaling maar dat is in feite onjuist. Als een lus 2 keer wordt uitgevoerd, zijn dat namelijk 2 iteraties en maar één herhaling.
Ik hoop dat deze uitleg over foreach duidelijk genoeg is anders moet je dit hier onder maar even melden en dan pas ik hem wel aan.
Een andere ook veelgebruikte controle structuur bij arrays is natuurlijk de zogenaamde for-loop. Deze telt tussen 2 waarden die jij opgeeft (meer info op php.net). Je kan dit echter alleen gebruiken voor een geïndexeerde array wat ook logisch is als je een beetje nadenkt. Als je al een for-loop hebt gebruikt dan zul je wel weten dat je moet opgeven wanneer de loop moet stoppen of met andere woorden vanaf welk getal word de loop beëindigd. Daarvoor gebruiken we de functie count ().
<?php
$array_2 = array( 'thomas' , 'vincent' , 'david' , 'veronique' );
$num = count($array_2)
for ($i = 0 ; $i < $num ; $i++) {
echo $array_2[$i] , "<br>";
}
?>
$num is gewoon een variabele ik had evengoed numElementen kunnen kiezen. De $i++ zorgt ervoor dat na elke lus $i met één wordt verhoogd. De output lijkt me logisch: thomas vincent, david, veronique.
De belangrijkste controle structuren die IK het meeste gebruik zijn uitgelegd. Je kunt me altijd een pm zenden voor aanvullende info.
Pagina 3
Associatieve arrays koppelen met foreach
<?php
// definiëren van de arrays (#1)
$users = array( 1 => 'thomas' , 'vincent' , 'david' , 'veronique' );
$gegevens = array( 1 => 'man' , 'man' , 'man' , 'vrouw' );
$leeftijd = array( 1 => '18' , '80' , '3,5' , '35' );
// samenvoegen van de arrays a.d.h.v. een foreach structuur op de index die dezelfde is (0,1,2,...)
foreach ($users as $user_id => $user_name) {
echo $user_id, ": ", $user_name, " | ", $gegevens[$user_id], " | ", $leeftijd[$user_id];
echo "<br><br>";
}
?>
Het koppelen van arrays is iets wat ik nogal veel gebruik. De eerste 3 arrays zouden namelijk queries kunnen zijn uit een database. Door ze te koppelen krijg ik volgende output.
1: thomas | man | 18
2: vincent | man | 80
3: david | man | 3,5
4: veronique | vrouw | 35In een lus met foreach worden één voor één de namen uit de array $users en de gegevens en de leeftijd uit de arrays $gegevens en $leeftijd weergegeven op één rij per user. De lus gaat daarbij met foreach (users as $user_id => $user_name) uit van de array $users, omdat die eerder in het script kan worden gesorteerd. Met de echo $user_name kan dan de naam van elke user (lid) uit de array $users worden weergegeven. Voor het lezen van de bijhorende leeftijd en gegevens worden de arrays $leeftijd en $gegevens rechtstreeks geadresseerd met de echo $leeftijd[$user_id] en $gegevens[$user_id]. De arrays kunnen moeiteloos aan elkaar worden gekoppeld, omdat ze identieke id’s hebben die in de controlestructuur beschikbaar wordt gemaakt met as user_id =>...
Dit hoofdstuk van het artikel arrays zit er dan ook weer op. In het volgende hoofdstuk ga ik meerdimensionale arrays behandelen; een al iets ingewikkelder gegeven.
Pagina 4
Meerdimensionale of Multidimensionele arrays
Een parameter kan in een array elk gegevenstype hebben (zie eerste hoofdstuk). Een parameter in een array kan dus ook een volgende array zijn en daarmee kan je dus meerdimensionale arrays maken. Meerdimensionale arrays zijn vooral interessant omdat alleen een meerdimensionale array de vorm van een echte tabel heeft. Een gewone array is een tabel met slechts twee kolommen: een voor de sleutel en een voor de bijbehorende waarde. Zo kan je dus extra kolommen toevoegen.
output:
Zoals ik al zij is een meerdimensionale array dus niet meer dan een array in een array (#1). Bij het opstellen van de array moet je dus volgende syntax gebruiken:
[color = red]array_1[/color] = array( key => [color = red]array_2.1[/color](), key => array_2.2(),..);
Voor de output zijn er 2 mogelijkheden; je kan voor elk gegeven
[color = red]$array_1_name[/color] [ [color = red]array_2.1_name[/color] ] ["key"] gebruiken, geen dollarteken dus bij de 'array_name' van de 'array_name'.
of je kan a.d.h.v. een for-loop de user_id invullen wat je heel wat code bespaard.
<?php
$multi_array = array (1 => array ( 'thomas', 'david', 'veronique'), 2 => array ( 70, 30, 120) );
$num = count ($multi_array);
echo $num, '<br><br>';
for ($i = 1 ; $i <= $num ; $i++){
foreach ($multi_array[$i] as $key => $value) {
echo $key, ': ', $value, '<br>';
}
echo '<br>';
}
?>
Dit voorbeeld maakt gebruik van de functie array_multisort (meer uitleg in laatste hoofdstuk). Het voordeel van deze manier is dat je als je een array toevoegt om er een drie-dimensionele array van te maken je geen 3 keer foreach met de output moet gebruiken.
Hopelijk is dit duidelijk genoeg anders geef je mij een seintje.
<?php
// definiëren van de multi. array #1
$user_db = array( "id_1" => array( 'naam' => 'thomas' , 'gegevens' => 'man' , 'leeftijd' => 18 ),
"id_2" => array( 'naam' => 'david' , 'gegevens' => 'man' , 'leeftijd' => 80 ),
"id_3" => array( 'naam' => 'vincent' , 'gegevens' => 'man' , 'leeftijd' => 3.5 ),
"id_4" => array( 'naam' => 'veronique' , 'gegevens' => 'vrouw' , 'leeftijd' => 30));
// andere manier voor het definiëren van een multi. array
$array = array();
$array['id_1']['naam'] = 'thomas';
$array['id_1']['gegevens'] = 'man';
$array['id_1']['leeftijd'] = '18'
$array['id_2']['naam'] = 'david';
$array['id_2']['gegevens'] = 'man';
$array['id_2']['leeftijd'] = '80'
$array['id_2']['naam'] = 'vincent';
$array['id_2']['gegevens'] = 'man';
$array['id_2']['leeftijd'] = '3.5'
$array['id_2']['naam'] = 'veronique';
$array['id_2']['gegevens'] = 'vrouw';
$array['id_2']['leeftijd'] = '30'
// output (#2) (voor de 2 manieren)
echo $user_db["id_1"]["naam"], "<br>", $user_db["id_1"]["gegevens"], "<br>", $user_db["id_1"]["leeftijd"], "<br><br>"; //thomas
echo $user_db["id_2"]["naam"], "<br>", $user_db["id_2"]["gegevens"], "<br>", $user_db["id_2"]["leeftijd"], "<br><br>"; //david
echo $user_db["id_3"]["naam"], "<br>", $user_db["id_3"]["gegevens"], "<br>", $user_db["id_3"]["leeftijd"], "<br><br>"; //vincent
echo $user_db["id_4"]["naam"], "<br>", $user_db["id_4"]["gegevens"], "<br>", $user_db["id_4"]["leeftijd"], "<br><br>"; //veronique
?>
output:
thomas
man
18
ect,..
Zoals ik al zij is een meerdimensionale array dus niet meer dan een array in een array (#1). Bij het opstellen van de array moet je dus volgende syntax gebruiken:
[color = red]array_1[/color] = array( key => [color = red]array_2.1[/color](), key => array_2.2(),..);
Voor de output zijn er 2 mogelijkheden; je kan voor elk gegeven
[color = red]$array_1_name[/color] [ [color = red]array_2.1_name[/color] ] ["key"] gebruiken, geen dollarteken dus bij de 'array_name' van de 'array_name'.
<?php
// definiëren van de arrays in een array #1
$user_db = array( "id_1" => array( 'naam' => 'thomas' , 'gegevens' => 'man' , 'leeftijd' => 18 ),
"id_2" => array( 'naam' => 'david' , 'gegevens' => 'man' , 'leeftijd' => 80 ),
"id_3" => array( 'naam' => 'vincent' , 'gegevens' => 'man' , 'leeftijd' => 3.5 ),
"id_4" => array( 'naam' => 'veronique' , 'gegevens' => 'vrouw' , 'leeftijd' => 30));
// output met for-loop
for ($i = 1; $i <= 4; $i++) {
echo $user_db['id_' . $i]["naam"], "<br>", $user_db['id_' . $i]["gegevens"], "<br>", $user_db['id_' . $i]["leeftijd"], "<br><br>";
}
?>
of je kan a.d.h.v. een for-loop de user_id invullen wat je heel wat code bespaard.
<?php
$multi_array = array (1 => array ( 'thomas', 'david', 'veronique'), 2 => array ( 70, 30, 120) );
$num = count ($multi_array);
echo $num, '<br><br>';
for ($i = 1 ; $i <= $num ; $i++){
foreach ($multi_array[$i] as $key => $value) {
echo $key, ': ', $value, '<br>';
}
echo '<br>';
}
?>
Dit voorbeeld maakt gebruik van de functie array_multisort (meer uitleg in laatste hoofdstuk). Het voordeel van deze manier is dat je als je een array toevoegt om er een drie-dimensionele array van te maken je geen 3 keer foreach met de output moet gebruiken.
Hopelijk is dit duidelijk genoeg anders geef je mij een seintje.
Pagina 5
Arrays resetten / wijzigen / toevoegen
Nu wil ik het hebben over het verwijderen van arrays, het wijzigen van arrays en het toevoegen van variabelen in arrays.
Het verwijderen van arrays is heel simpel; het kan namelijk met unset ().
Je kunt een hele array vernietigen (#1) maar je kunt ook bepaalde variabelen uit een array vernietigen met dezelfde functie. Je selecteert de index van de variabele en gebruikt de volgende syntax:
unset ($array ['index']);
Een andere manier voor het ‘verwijderen’ van een array is door hem gelijk te stellen aan niets. Je stelt de array dus gelijk aan NULL. Eigenlijk is het fout als ik de term verwijderen gebruik want wat ik eigenlijk doe is het leegmaken van de array, hij bestaat dus nog maar hij is leeg.
EXTRA INFORMATIE OVER NULL
De speciale constante NULL (vanaf PHP4) wordt gebruikt om aan te duiden dat een variabele geen waarde heeft. Bij het programmeren bestaat een groot verschil tussen een variabele die niet bestaat en een variavele zonder waarde (#4). Als je een variabele unset is hij dus weg maar als je hem gelijkstelt aan NULL of '' dan is hij leeg. In beide voorbeelden bestaat de array dus nog maar is hij leeg. (#3 & #4). Om te controleren als een variabele dus leeg is gebruik je de functie empty ().
Het wijzigen van een array is zeer simpel en in vergelijking tot andere talen zeer uniek. Om een bepaalde waarde te wijzigen kan je ofwel de hele array opnieuw opgeven met de wijzigingen of je kiest a.d.h.v. de index welke waarde er moet worden gewijzigd.
De functie array_push voegt een element toe aan het einde van de array terwijl de functie array_unshift een element aan het begin van de array toevoegt.
output van unshift & push
Dit hoofdstuk zou voor iedereen duidelijk moeten zijn denk ik.
In het volgende hoofdstuk ga ik het hebben over bepaalde functies zoals sort () en asort () die bij arrays horen.
<?php
$array = array (1 => 'thomas' , 2 => 'david' );
foreach ($array as $user_id => $user_name) {
echo $user_id, ": ", $user_name;
echo "<br><br>";
}
unset ($array); // verwijderd alles #1
unset ($array[1]); // verwijdered '1 => thomas' #2
?>
Het verwijderen van arrays is heel simpel; het kan namelijk met unset ().
Je kunt een hele array vernietigen (#1) maar je kunt ook bepaalde variabelen uit een array vernietigen met dezelfde functie. Je selecteert de index van de variabele en gebruikt de volgende syntax:
unset ($array ['index']);
<?php
$array = ''; // #3
$array [1] = '' ; // #4
?>
Een andere manier voor het ‘verwijderen’ van een array is door hem gelijk te stellen aan niets. Je stelt de array dus gelijk aan NULL. Eigenlijk is het fout als ik de term verwijderen gebruik want wat ik eigenlijk doe is het leegmaken van de array, hij bestaat dus nog maar hij is leeg.
EXTRA INFORMATIE OVER NULL
De speciale constante NULL (vanaf PHP4) wordt gebruikt om aan te duiden dat een variabele geen waarde heeft. Bij het programmeren bestaat een groot verschil tussen een variabele die niet bestaat en een variavele zonder waarde (#4). Als je een variabele unset is hij dus weg maar als je hem gelijkstelt aan NULL of '' dan is hij leeg. In beide voorbeelden bestaat de array dus nog maar is hij leeg. (#3 & #4). Om te controleren als een variabele dus leeg is gebruik je de functie empty ().
<?php
// thomas wordt gewijzigd in de david en omgekeerd
$array [1] = 'david' ;
$array [2] = 'thomas' ;
?>
Het wijzigen van een array is zeer simpel en in vergelijking tot andere talen zeer uniek. Om een bepaalde waarde te wijzigen kan je ofwel de hele array opnieuw opgeven met de wijzigingen of je kiest a.d.h.v. de index welke waarde er moet worden gewijzigd.
<?php
$array = array (1 => 'thomas' , 2 => 'david' );
// array_unshift
array_unshift($array, 'vincent');
foreach ($array as $output_id => $output_num) {
echo $output_id, ': ', $output_num, '<br>';
}
// array_push
array_push($array, 'veronique');
foreach ($array as $output_id => $output_num) {
echo $output_id, ': ', $output_num, '<br>';
}
?>
De functie array_push voegt een element toe aan het einde van de array terwijl de functie array_unshift een element aan het begin van de array toevoegt.
output van unshift & push
//met unshift ()
0: vincent
1: thomas
2: david
//met push ()
0: vincent
1: thomas
2: david
3: veronique
Dit hoofdstuk zou voor iedereen duidelijk moeten zijn denk ik.
In het volgende hoofdstuk ga ik het hebben over bepaalde functies zoals sort () en asort () die bij arrays horen.
Pagina 6
Allerlei functies met arrays (uitgebreid)
Er zijn heel wat functies die je kunt gebruiken bij arrays; de meest gebruikte ga ik in dit hoofdstuk proberen te behandelen.
1. sort ()
<?php
$users = array ( 'x_thomas', 'k_david', 'a_vincent', 'b_veronique');
sort ($users);
foreach ($users as $id => $name) {
echo $id, ' : ', $name, ' ';
}
?>
output: 0 : a_vincent 1 : b_veronique 2 : k_david 3 : x_thomas
sort sorteert de elementen (bv.'thomas') op alfanumerieke waarde. De index verandert echter niet, het eerste element is nu 'a_vincent' maar hij heeft de index van 'thomas'.
2. asort ()
<?php
<?php
$users = array ( 'x_thomas', 'k_david', 'a_vincent', 'b_veronique');
asort ($users);
foreach ($users as $id => $name) {
echo $id, ' : ', $name, ' ';
}
?>
output: 2 : a_vincent 3 : b_veronique 1 : k_david 0 : x_thomas
sort sorteert de elementen (bv.'thomas') op alfanumerieke waarde. Dit keer blijft de index "plakken" aan het element wat een voordeel is als je met associatieve arrays werkt.
3. count () & sizeof ()
<?php
$users = array ( 1 => 'thomas' , 2 => 'david');
// met count
$num_1 = count ($users);
// met sizeof
$num_2 = sizeof ($users);
echo $num_1, " = count () <br>", $num_2, " = sizeof ()";
?>
output: 2 = count () 2 = sizeof ()
count () & sizeof () tellen het aantal elementen van een array.
count en sizeof zijn equivalent!
4. array_flip ()
<?php
$users = array ( 'thomas', 'david', 'vincent', 'veronique');
$users = array_flip ($users);
foreach ($users as $id => $name) {
echo $id, ' : ', $name, ' ';
}
?>
output: thomas : 0 david : 1 vincent : 2 veronique : 3
array_flip() verwisselt de keys met de verbonden elementen in een array.
5. array_reverse ()
<?php
$users = array ('thomas', 'david', 'vincent', 'veronique');
$result = array_reverse ($users);
// oorspronkelijke array
foreach ($users as $id => $name) {
echo $name, ' ';
}
echo '<br>';
// array met reverse
foreach ($result as $id => $name) {
echo $name, ' ';
}
?>
output: thomas david vincent veronique
veronique vincent david thomas
array_reverse() de elementen van een array worden in omgekeerde volgorde gezet.
6. shuffle ()
<?php
$users = range (1,20);
shuffle ($users);
foreach ($users as $id => $name) {
echo $name, ' ';
}
?>
output 1: 1 12 7 9 19 4 5 3 8 14 13 18 15 10 6 20 17 16 2 11
output 2: 7 19 8 20 9 3 14 16 18 1 15 11 2 5 4 17 10 12 13 6
shuffle() rangschikt de elementen van een array in willekeurige volgorde.
7. range ()
output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
range accepteert 2 integers om dan alle getallen die zich tussen die 2 integers bevinden, in dit voorbeeld 1 en 10 te genereren.
<?php
$mijn_array = range (1,5)
// is dus equivalent aan
$mijn_array = array (1, 2, 3, 4, 5);
?>
8. in_array ()
<?php
$users = array ( 1 => 'thomas' , 2 => 'david');
if (in_array('thomas', $users, true)) //', true kan je weglaten' ; voor zover ik weet is er geen verschil.
echo "thomas bestaat in \$users" ;
?>
output: thomas bestaat in $users
in_array doorzoekt een array op een element en geeft true weer als de array het element bevat, anders false. (hoofdlettergevoelig)
9. is_array ()
<?php
$users = array ('thomas', 'david', 'vincent', 'veronique');
if (is_array ($users)){
echo '$users is een array';
} else {
echo '$users is GEEN array';
}
?>
output: $users is een array
is_array zal controleren of de ingevulde variabele een array is of niet.
10. array_multisort ()
<?php
$multi_array = array (1 => array ( 'thomas', 'david', 'veronique'), 2 => array ( 70, 30, 120) );
array_multisort ($multi_array[1], SORT_ASC, SORT_STRING,
$multi_array[2], SORT_NUMERIC, SORT_DESC);
$num = count ($multi_array) + 1;
for ($i = 1 ; $i < $num ; $i++){
foreach ($multi_array[$i] as $key => $value) {
echo $key, ': ', $value, '<br>';
}
echo '<br>';
}
?>
output: 0: david 1: thomas 2: veronique 0: 30 1: 70 2: 120
array_multisort sorteren van meerdere of multi-dimensionale arrays. Als je goed kijkt zie je dat ik een systeempje heb inschreven dat ervoor zorgt dat ik het script niet verder moet aanpassen als ik een element of een array toevoeg.
Functies die in de loop der tijden nog zullen worden toegevoegt: reset (), aray_multisort(), array_walk, current (), next (), end (), prev (), key(), each (),...
Op www.php.net onder array functions kan je een volledige lijst met functies voor arrays vinden. Op phpfreakz.nl staat ook artikel over arrays, weliswaar korter maar daarom niet minder interresant. Daar kan je ook een artikel over multisort lezen door Martijn Korse.
Zo, nu je klaar bent met deze tutorial zou je toch al iets meer moeten weten met arrays. Als je zelf nog voorstellen hebt voor functies kan je mij die altijd geven. :p
1. sort ()
<?php
$users = array ( 'x_thomas', 'k_david', 'a_vincent', 'b_veronique');
sort ($users);
foreach ($users as $id => $name) {
echo $id, ' : ', $name, ' ';
}
?>
output: 0 : a_vincent 1 : b_veronique 2 : k_david 3 : x_thomas
sort sorteert de elementen (bv.'thomas') op alfanumerieke waarde. De index verandert echter niet, het eerste element is nu 'a_vincent' maar hij heeft de index van 'thomas'.
2. asort ()
<?php
<?php
$users = array ( 'x_thomas', 'k_david', 'a_vincent', 'b_veronique');
asort ($users);
foreach ($users as $id => $name) {
echo $id, ' : ', $name, ' ';
}
?>
output: 2 : a_vincent 3 : b_veronique 1 : k_david 0 : x_thomas
sort sorteert de elementen (bv.'thomas') op alfanumerieke waarde. Dit keer blijft de index "plakken" aan het element wat een voordeel is als je met associatieve arrays werkt.
3. count () & sizeof ()
<?php
$users = array ( 1 => 'thomas' , 2 => 'david');
// met count
$num_1 = count ($users);
// met sizeof
$num_2 = sizeof ($users);
echo $num_1, " = count () <br>", $num_2, " = sizeof ()";
?>
output: 2 = count () 2 = sizeof ()
count () & sizeof () tellen het aantal elementen van een array.
count en sizeof zijn equivalent!
4. array_flip ()
<?php
$users = array ( 'thomas', 'david', 'vincent', 'veronique');
$users = array_flip ($users);
foreach ($users as $id => $name) {
echo $id, ' : ', $name, ' ';
}
?>
output: thomas : 0 david : 1 vincent : 2 veronique : 3
array_flip() verwisselt de keys met de verbonden elementen in een array.
5. array_reverse ()
<?php
$users = array ('thomas', 'david', 'vincent', 'veronique');
$result = array_reverse ($users);
// oorspronkelijke array
foreach ($users as $id => $name) {
echo $name, ' ';
}
echo '<br>';
// array met reverse
foreach ($result as $id => $name) {
echo $name, ' ';
}
?>
output: thomas david vincent veronique
veronique vincent david thomas
array_reverse() de elementen van een array worden in omgekeerde volgorde gezet.
6. shuffle ()
<?php
$users = range (1,20);
shuffle ($users);
foreach ($users as $id => $name) {
echo $name, ' ';
}
?>
output 1: 1 12 7 9 19 4 5 3 8 14 13 18 15 10 6 20 17 16 2 11
output 2: 7 19 8 20 9 3 14 16 18 1 15 11 2 5 4 17 10 12 13 6
shuffle() rangschikt de elementen van een array in willekeurige volgorde.
7. range ()
<?php
$maak_var= range(1, 20);
while (list(, $var) = each($maak_var)) {
echo $var," ";
}
echo "<br><br> ";
?>
output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
range accepteert 2 integers om dan alle getallen die zich tussen die 2 integers bevinden, in dit voorbeeld 1 en 10 te genereren.
<?php
$mijn_array = range (1,5)
// is dus equivalent aan
$mijn_array = array (1, 2, 3, 4, 5);
?>
8. in_array ()
<?php
$users = array ( 1 => 'thomas' , 2 => 'david');
if (in_array('thomas', $users, true)) //', true kan je weglaten' ; voor zover ik weet is er geen verschil.
echo "thomas bestaat in \$users" ;
?>
output: thomas bestaat in $users
in_array doorzoekt een array op een element en geeft true weer als de array het element bevat, anders false. (hoofdlettergevoelig)
9. is_array ()
<?php
$users = array ('thomas', 'david', 'vincent', 'veronique');
if (is_array ($users)){
echo '$users is een array';
} else {
echo '$users is GEEN array';
}
?>
output: $users is een array
is_array zal controleren of de ingevulde variabele een array is of niet.
10. array_multisort ()
<?php
$multi_array = array (1 => array ( 'thomas', 'david', 'veronique'), 2 => array ( 70, 30, 120) );
array_multisort ($multi_array[1], SORT_ASC, SORT_STRING,
$multi_array[2], SORT_NUMERIC, SORT_DESC);
$num = count ($multi_array) + 1;
for ($i = 1 ; $i < $num ; $i++){
foreach ($multi_array[$i] as $key => $value) {
echo $key, ': ', $value, '<br>';
}
echo '<br>';
}
?>
output: 0: david 1: thomas 2: veronique 0: 30 1: 70 2: 120
array_multisort sorteren van meerdere of multi-dimensionale arrays. Als je goed kijkt zie je dat ik een systeempje heb inschreven dat ervoor zorgt dat ik het script niet verder moet aanpassen als ik een element of een array toevoeg.
Functies die in de loop der tijden nog zullen worden toegevoegt: reset (), aray_multisort(), array_walk, current (), next (), end (), prev (), key(), each (),...
Op www.php.net onder array functions kan je een volledige lijst met functies voor arrays vinden. Op phpfreakz.nl staat ook artikel over arrays, weliswaar korter maar daarom niet minder interresant. Daar kan je ook een artikel over multisort lezen door Martijn Korse.
Zo, nu je klaar bent met deze tutorial zou je toch al iets meer moeten weten met arrays. Als je zelf nog voorstellen hebt voor functies kan je mij die altijd geven. :p
Reacties
0