wiki.phpfreakz.nl
Aanmelden Artikel Overleg Bewerk Geschiedenis Go to the site toolbox

Het Wiel Uitgevonden:Arrays

--Taco 24 mrt 2009 21:35 (CET)

Deze tutorial behandelt een simpel maar onmisbaar stukje PHP: Arrays. Het is een principe dat in bijna alle programeertalen voorkomt. Mocht je het al kennen, dan kan je deze tutorial waarschijnlijk overslaan. Is het nieuw voor je, zorg dan dat je het concept goed begrijpt voor je verder gaat.

Inhoud

Wanneer gebruik je arrays?

Kort gezegd is een array een lijstje. De makers van PHP noemen het in de manual een 'ordered map', mocht je je dat afvragen. Elk punt op het lijstje heeft twee eigenschappen: een key en een value. Je vraagt aan php 'Wat hoort er bij deze key?' en krijgt als antwoord 'Deze value, meneer'. In de voorbeeldjes wordt het nut hiervan duidelijker. Vuistregel is: Als iets een lijstje is, dan kan je maar beter een array gebruiken!

var_dump(), print_r() en foreach zijn trouwens onmisbaar als je aan het experimenteren bent met arrays.

Laten we kijken naar een gebruikerssysteem. Ik wil van mijn gebruikers bijhouden wat hun gegevens zijn. Mijn gebruiker heten Arnol, Bassie en Chris. Ik wil hun leeftijd weten en hun woonplaats. Zonder arrays zou je op zoiets uitkomen:

<?php
$iLeeftijd_arnol = 50;
$iLeeftijd_bassie = 40;
$iLeeftijd_chris = 30;
$sWoonplaats_arnol = 'Eindhoven';
$sWoonplaats_bassie = 'Roosendaal';
$sWoonplaats_chris = 'Utrecht';
?>

Nu werkt dit natuurlijk wel, maar het is vreselijk onhandig. Als je 10 gegevens van 100 gebruikers hebt, heb je al 1000 variabelen nodig. Als er een nieuwe gebruiker komt, moet ik mijn code aanpassen. Maar wacht, dit zijn lijstjes! Laten we eens een poging doen een array te maken. Eerst de leeftijden:

<?php
$aLeeftijden = array(
  'Arnol'  =>  50,
  'Bassie' =>  40,
  'Chris'  =>  30
);
?>

Voila, een array! Deze array bevat drie elementen. Ieder van de elementen heeft een key en een value. De keys zijn in dit geval 'Arnol', 'Bassie' en 'Chris', de values zijn 50, 40 en 30. We kunnen nu simpel de leeftijd opvragen:

<?php
// $aLeeftijden bestaat als het goed is al, zie vorige stukje code.
print 'Arnol is ' . $aLeeftijden['Arnol'] . '<br />';
// Het kan ook wat dynamischer:
$sNaam = 'Chris';
print $sNaam . ' is ' . $aLeeftijden[$sNaam] . '<br />';
?>

Ik noemde drie onmisbare dingen aan het begin, nietwaar? Laten we ze alledrie maar eens proberen:

<?php
// $aLeeftijden bestaat als het goed is al
print '<pre>';          // de functies geven geen HTML-enters
print_r($aLeeftijden);  // print_r is lekker overzichtelijk
var_dump($aLeeftijden); // var_dump geeft meer informatie, vooral handig als er dingen leeg kunnen zijn
print '</pre>';
foreach ( $aLeeftijden as $sKey => $iValue ) {
                        // foreach loopt door de array heen, element voor element
  print 'Bij key ' . $sKey . ' hoort value ' . $iValue . '.<br />';
}
?>

We proberen het ook eens voor de woonplaatsen. Deze keer gebruik ik, omdat het kan, een andere manier om de array aan te maken.

<?php
$aWoonplaatsen = array();   // Maak een lege array aan, eentje met nul elementen dus
$aWoonplaatsen['Arnol'] = 'Eindhoven';
$aWoonplaatsen['Bassie'] = 'Roosendaal';
$aWoonplaatsen['Chris'] = 'Utrecht';
 
// Controleer of het gelukt is!
print '<pre>';
print_r($aWoonplaatsen);
print '</pre>';
?>

Als keys niet van belang zijn

Regelmatig zul je ook een lijstje hebben, waarbij het niet uitmaakt wat de keys zijn. Het gaat dan alleen om de values. Dat kan als volgt

<?php
$aGebruikers = array(
  'Arnol',
  'Bassie'
);                         // De array heeft nu twee gebruikers
$aGebruikers[] = 'Chris';  // Voeg een gebruiker toe aan het lijstje
 
print '<pre>';
print_r($aGebruikers);
print '</pre>';
?>

Let op dat de elementen wel keys hebben, ook al heb je dat zelf niet gedaan. PHP nummert de values automatisch voor je als je zelf geen keys kiest.

Arrays in meerdere dimensies

Zo, die titel moet wel wat mensen afschrikken, toch? Nergens voor nodig, gelukkig. We hebben hierboven wat voorbeelden van arrays gezien, maar eigenlijk wil je maar één variabele: de gebruikerslijst. Wat is een gebruikerslijst? Een lijst met gebruikers, met bij elke gebruiker een lijst met gegevens. Een lijstje met lijstjes! Dit kan je op meerdere manieren aanpakken. Twee logische zijn als volgt:

<?php
// Manier 1
// Handig als data (zoals namen) dubbel kan zijn
$aGebruikers = array(
  array(
    'naam'       => 'Arnol',
    'woonplaats' => 'Eindhoven',
    'leeftijd'   => 50
  ),
  array(
    'naam'       => 'Bassie',
    'woonplaats' => 'Roosendaal',
    'leeftijd'   => 40
  ),
  array(
    'naam'       => 'Chris',
    'woonplaats' => 'Utrecht',
    'leeftijd'   => 30
  )
);
 
print '<ul>';
foreach ( $aGebruikers as $aGebruiker ) {       // De keys maken hier niet uit
  print '<li>';
  print '<ul>';
  foreach ( $aGebruiker as $sKey => $sValue ) { // De keys maken hier wel uit
    print '<li>' . $sKey . ': ' . $sValue . '</li>';
  }
  print '</ul>';
  print '</li>';
}
print '</ul>';
 
// Manier 2
// Je hebt iets unieks als key nodig, zoals hier de naam
// Handig om dingen op te zoeken
$aGebruikers = array(
  'Arnol' => array(
    'woonplaats' => 'Eindhoven',
    'leeftijd'   => 50
  ),
  'Bassie' => array(
    'woonplaats' => 'Roosendaal',
    'leeftijd'   => 40
  ),
  'Chris' => array(
    'woonplaats' => 'Utrecht',
    'leeftijd'   => 30
  )
);
 
print '<dl>';
foreach ( $aGebruikers as $sNaam => $aGegevens ) {
  print '<dt>' . $sNaam . '</dt>';
  foreach ( $aGegevens as $sKey => $sValue ) {
    print '<dd>' . $sKey . ': ' . $sValue . '</dd>';
  }
}
print '</dl>';
print 'Chris woont in ' . $aGebruikers['Chris']['woonplaats'];
 
?>

Je kan het natuurlijk zo ver uitbreiden als je wil. Overdreven voorbeeldje:

<?php
$aGebruikers = array(
  'Dirk' => array(
    'openbare gegevens' => array(
      'adressen' => array(
        'Stationslaan 1',
        'Kerkstraat 2'
      ),
      'leeftijd' => 20
    ),
    'privegegevens' => array()
  ),
  'Eefje' => array()
);
print $aGebruikers['Dirk']['openbare gegevens']['adressen'][1];
?>

Info uit arrays

Je kan, zoals we hebben gezien, specifieke info ophalen uit arrays. Maar je soms wil andere dingen erover weten.

<?php
$aLeeftijden = array(
  'Arnol'  =>  50,
  'Bassie' =>  40,
  'Chris'  =>  30
);
 
print 'Aantal gebruikers: ' .count($aLeeftijden) . '<br />';
print 'Hoogste leeftijd: ' . max($aLeeftijden) . '<br />';
if ( in_array(40,$aLeeftijden) ) {
  print 'Er is iemand 40!';
}
else {
  print 'Er is niemand 40!';
}
?>

En nu?

Als je eenmaal een array met informatie hebt, kan je er een hele serie functies op loslaten. Je kan ze sorteren, doorzoeken, flippen, shiften, mergen, noem het maar op. De volledige lijst kan je het beste uit de manual halen, het gaat wat ver alle functies hier te bespreken. Ga er maar van uit dat de meeste bewerkingen die je op een array wil loslaten, al kant-en-klaar in die lijst staan.

Vervolgens kan je direct met een paar veelgebruikte en leuke arrays uit PHP aan de slag: de superglobals. Alles daarover vind je in Het Wiel Uitgevonden:Superglobals.

Site Toolbox:

Persoonlijke hulpmiddelen
De laatste wijziging op deze pagina vond plaats op 5 apr 2010 23:51. - Deze pagina werd 1.759 maal bekeken. - Disclaimers - Over PFZWIKI