Multidimensionale array naar functie. (warning)
Ik ben bezig met een soort proof of concept om straks een uitgebreidere functie op te bouwen.
Ik wil graag een multidimensionale array naar een functie versturen om vervolgens daar de gegevens weer op te halen.
Dit heb ik min of meer werkende.
Maar ik krijg een mooie warning.
En ik heb geen flauw idee hoe ik deze warning zou moeten wegkrijgen.
Dit is de code die ik inmiddels heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function test($waarde){
while (list ($key, $val) = each ($waarde)) {
while (list ($let, $detail) = each ($val)) {
echo $detail."<br>";
}
}
}
$fiets = array("gazelle", "batavus", "peugot", "giant");
$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan");
test($fiets);
?>
function test($waarde){
while (list ($key, $val) = each ($waarde)) {
while (list ($let, $detail) = each ($val)) {
echo $detail."<br>";
}
}
}
$fiets = array("gazelle", "batavus", "peugot", "giant");
$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan");
test($fiets);
?>
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
Handiger om dan maar meteen met de language construct 'foreach' te gaan werken:
Toevoeging op 16/08/2012 17:48:58:
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()).
Wel weer een stuk verder.
Nu alle elementen gelijk gemaakt. Ervanuit gaande dat het dus allemaal gelijk moet zijn.
Maar nog steeds niet wat ik zoek.
Mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
function test($waarde){
echo "<ul>";
foreach ( $waarde as $key => $val ){
echo "<li>".$val;
echo "<ul>";
foreach ( $val as $key => $let ){
echo "<li>".$let."</li>";
}
echo "</ul></li>";
}
echo "</li>";
}
$fiets = array("gazelle", "batavus", "peugot", "giant");
$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet", "hans");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan", "izaak");
test($fiets);
?>
function test($waarde){
echo "<ul>";
foreach ( $waarde as $key => $val ){
echo "<li>".$val;
echo "<ul>";
foreach ( $val as $key => $let ){
echo "<li>".$let."</li>";
}
echo "</ul></li>";
}
echo "</li>";
}
$fiets = array("gazelle", "batavus", "peugot", "giant");
$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet", "hans");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan", "izaak");
test($fiets);
?>
Dit is wat ik krijg:
Het is te zien dat hij het volgende doet:
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.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
Array
(
[0] => gazelle
[1] => batavus
[2] => peugot
[3] => giant
[gazelle] => Array
(
[0] => jantje
[1] => klaasje
[2] => peter
)
[batavus] => Array
(
[0] => onno
[1] => piet
[2] => hans
)
[peugot] => Array
(
[0] => waldek
[1] => otto
[2] => cornelis
)
[giant] => Array
(
[0] => stanislaw
[1] => daan
[2] => izaak
)
)
?>
Array
(
[0] => gazelle
[1] => batavus
[2] => peugot
[3] => giant
[gazelle] => Array
(
[0] => jantje
[1] => klaasje
[2] => peter
)
[batavus] => Array
(
[0] => onno
[1] => piet
[2] => hans
)
[peugot] => Array
(
[0] => waldek
[1] => otto
[2] => cornelis
)
[giant] => Array
(
[0] => stanislaw
[1] => daan
[2] => izaak
)
)
?>
Alsof hij de array twee keer doorloopt??
Gewijzigd op 16/08/2012 19:59:34 door Alex Hakkenberg
Als je dit doet:
Heb je een array $fiets met vier waardes erin, niet vier keys. Bovenstaande is hetzelfde als:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$fiets = array();
$fiets[] = 'gazelle';
$fiets[] = 'batavus';
$fiets[] = 'peugot';
$fiets[] = 'giant';
?>
$fiets = array();
$fiets[] = 'gazelle';
$fiets[] = 'batavus';
$fiets[] = 'peugot';
$fiets[] = 'giant';
?>
Maar is het dan mogelijk een multidimensionale array mee te geven??
Je hebt meerdere manieren om een waarde aan een array te geven:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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");
?>
//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.