En dit de foutmelding (warning):
( ! ) Warning: Variable passed to each() is not an array or object in C:\wamp\www\test\function-array\multidimensionalarray.php on line 5
Dan ben je aan het einde van de array gekomen en probeer je het waarschijnlijk op de laatste 'false' te doen wat niet gaat werken.
Handiger om dan maar meteen met de language construct 'foreach' te gaan werken:
<?php
foreach ( $waarde as $key => $val ){
}
?>
[size=xsmall]Toevoeging op 16/08/2012 17:48:58:[/size]
Of (waarschijnlijker overigens), je hebt een paar niet zo multidimensionale elementen. Je initialiseert $fiets namelijk met een array. Als je er dus doorheen gaat lopen heb je een aantal elementen die geen array zijn, maar een string. Daarop kan je each() niet loslaten. Bij de tweede loop moet je dus eerst testen of $val wel een array is (met de functie is_array()).
gazelle
batavus
peugot
giant
Array
jantje
klaasje
peter
Array
onno
piet
hans
Array
waldek
otto
cornelis
Array
stanislaw
daan
izaak
Hij maakt dus een lijst met alle fietsen.
En dan begint hij alsof hetzelfde in een rijtje hoort de rest door te parsen.
Dan krijgt hij idd non objects.
Maar hoe verhelp ik dit?? Ik ben een beetje een leek in dit soort dingen.
Doe eens een print_r() op je array, dan zie je hoe de hele array eruit komt te zien. Dat is denk ik even anders dan je verwacht.
Overigens kan je dat verder niet gebruiken, want je krijgt wel alles te zien, maar met een print_r kan je er niet doorheen lopen. Het gaat er nu even om dat je een beeld krijgt van hoe je datastructuur eruit ziet.
Zoals ik al zei, je krijgt iets anders dan dat je verwacht. Maar dit klopt, jouw verwachting dus niet.
Als je dit doet:
<?php
$fiets = array("gazelle", "batavus", "peugot", "giant");
?>
Heb je een array $fiets met vier waardes erin, niet vier keys. Bovenstaande is hetzelfde als:
<?php
$fiets = array();
$fiets[] = 'gazelle';
$fiets[] = 'batavus';
$fiets[] = 'peugot';
$fiets[] = 'giant';
?>
Even los van het antwoord van Ivo (wat correct is), het antwoord op de vraag of je een multidimensionale array kan meegeven is ja. Dat doe je namelijk al. Alleen haal je keys en values door elkaar.
Je hebt meerdere manieren om een waarde aan een array te geven:
<?php
//maak een array met alleen values (default dan numerieke keys)
$fiets = array("gazelle", "batavus", "peugot", "giant");
//maak een array met keys en values
$fiets = array(
'gazelle'=>array("jantje", "klaasje", "peter"),
'batavus'=>array("onno", "piet", "hans"),
'peugot'=>array("waldek", "otto", "cornelis"),
'giant'=>array("stanislaw", "daan", "izaak")
) ;
//maak een lege array en vul met alleen values
$fiets = array();
$fiets[] = 'gazelle';
$fiets[] = 'batavus';
$fiets[] = 'peugot';
$fiets[] = 'giant';
//maak een lege array en vul met keys en values
$fiets = array();
$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet", "hans");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan", "izaak");
?>
Elk element van een array bestaat uit een key en een value. Een key kan een string zijn (waarmee het een associatieve array wordt) of een getal (integer). Als je geen key meegeeft dan wordt het automatisch een getal. Alleen een key meegeven en geen value kan niet, geef je maar 1 waarde op per element dan is dat dus de value.
Verder kan elke value weer elk datatype zijn en dus ook een array. Dit kan je per element mixen, waardoor een array in php dus verschillende dimensies kan hebben.