recursieve array
Ik kreeg het slechts gedeeltelijk voor elkaar... alleen als het een array was kreeg ik het onder elkaar, maar als het geen array was dan niet. Ik heb het nu opgegeven want ik word er gek van. Maar als jij nog een laatste poging weet hoor ik het HEEEEEEEEL graag. Zou wel heel fijn zijn, want dan kan ik weer vooruit.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
naam : piet
leeftijd: 30
hobbies :
0 : internet
1 : vakantie
spelletjes: boggle
yahtzee
leeftijd: 30
hobbies :
0 : internet
1 : vakantie
spelletjes: boggle
yahtzee
Merk hierbij op dat "hobbies" en "spelletjes" een array zijn.
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
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
<?php
$data = array(
'naam' => 'piet',
'leeftijd' => 30,
'hobbies' => array(
0 => 'internet',
1 => 'vakantie',
'spelletjes' => array(
'boggle',
'yahtzee'
)
)
);
echo getUnorderedList($data);
function getUnorderedList($arg)
{
if ($arg === null) {
return;
}
$return = '<ul>';
if (is_array($arg)) {
foreach ($arg as $key => $value) {
$return .= '<li>' . $key . getUnorderedList($value) . '</li>';
}
} else {
$return .= '<li>' . $arg . '</li>';
}
$return .= '</ul>';
return $return;
}
?>
$data = array(
'naam' => 'piet',
'leeftijd' => 30,
'hobbies' => array(
0 => 'internet',
1 => 'vakantie',
'spelletjes' => array(
'boggle',
'yahtzee'
)
)
);
echo getUnorderedList($data);
function getUnorderedList($arg)
{
if ($arg === null) {
return;
}
$return = '<ul>';
if (is_array($arg)) {
foreach ($arg as $key => $value) {
$return .= '<li>' . $key . getUnorderedList($value) . '</li>';
}
} else {
$return .= '<li>' . $arg . '</li>';
}
$return .= '</ul>';
return $return;
}
?>
Als het je puur om de opmaak gaat, moet je hieraan CSS of stringfuncties toevoegen.
En nu ga ik koken voor de kids. Frietjes ;)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
function get_array($input, $level = 0) {
# generate a table array from the data
$lines = array();
foreach ($input as $key => $value) {
if (0 < $level) {
$line = array_fill(0, $level, null);
} else {
$line = array();
}
if (is_array($value) || is_object($value)) {
$lines[] = array_merge($line, array($key));
foreach (get_array($value, $level + 1) as $l) {
$lines[] = $l;
}
} else {
$lines[] = array_merge($line, array($key, $value));
}
}
return $lines;
}
function dump_yaml($input) {
$lines = get_array($input);
$widths = array();
foreach ($lines as $row) {
$i = 0;
foreach ($row as $column) {
$widths[$i] = isset($widths[$i]) ? $widths[$i] : 0;
if ($widths[$i] < strlen($column)) {
$widths[$i] = strlen($column);
}
$i++;
}
}
$lines = array_map(function ($row) use ($widths) {
$rowLine = array();
$i = 0;
foreach ($row as $column) {
$columnLen = strlen($column);
if ($columnLen < $widths[$i]) {
$rowLine[] = $column.str_repeat(' ', $widths[$i] - $columnLen);
} else {
$rowLine[] = $column;
}
}
return implode('', $rowLine);
}, $lines);
return implode(PHP_EOL, $lines);
}
?>
function get_array($input, $level = 0) {
# generate a table array from the data
$lines = array();
foreach ($input as $key => $value) {
if (0 < $level) {
$line = array_fill(0, $level, null);
} else {
$line = array();
}
if (is_array($value) || is_object($value)) {
$lines[] = array_merge($line, array($key));
foreach (get_array($value, $level + 1) as $l) {
$lines[] = $l;
}
} else {
$lines[] = array_merge($line, array($key, $value));
}
}
return $lines;
}
function dump_yaml($input) {
$lines = get_array($input);
$widths = array();
foreach ($lines as $row) {
$i = 0;
foreach ($row as $column) {
$widths[$i] = isset($widths[$i]) ? $widths[$i] : 0;
if ($widths[$i] < strlen($column)) {
$widths[$i] = strlen($column);
}
$i++;
}
}
$lines = array_map(function ($row) use ($widths) {
$rowLine = array();
$i = 0;
foreach ($row as $column) {
$columnLen = strlen($column);
if ($columnLen < $widths[$i]) {
$rowLine[] = $column.str_repeat(' ', $widths[$i] - $columnLen);
} else {
$rowLine[] = $column;
}
}
return implode('', $rowLine);
}, $lines);
return implode(PHP_EOL, $lines);
}
?>
Het gaat echter nog niet helemaal goed, zie screenshot:
Hoe het dan zou moeten worden is zo:
Het id dus bijna goed... maar nog net niet. Wouter... krijg jij dat nog gefixt?
@Ward: smakelijk!
Gewijzigd op 22/03/2013 17:44:00 door Ozzie PHP
Dan moet je even regel 59 veranderen '' moet ' ' worden.
Toevoeging op 22/03/2013 17:34:24:
en tussen 0 en boggle en tussen 1 en yahtzee zit teveel ruimte
Toevoeging op 22/03/2013 17:49:10:
Voor de duidelijkheid:
Ozzie, dat laatste kan natuurlijk nooit. Waarom worden de laatste items niet ineens in kolommen ingedeeld?
Je hebt de keys 0, 1 en spelletjes. Hun waardes zijn respectievelijk internet, vakantie en een array. Die waardes moeten allemaal op dezelfde plek beginnen. Internet, vakantie en de array moeten dus op dezelfde hoogte beginnen zoals in mijn laatste voorbeeld. Vervolgens krijg je dan weer een nieuwe array met de keys 0 en 1 en de waardes boggle en yahtzee. De langste key is in dit geval maar 1 karakter lang (0 of 1). Dan volgt een spatie en vervolgens boggle (of yahtzee). Snap je wat ik bedoel? Je hebt dus de langste key, daar komt 1 spatie bij en dan komt de value. Op de positie van die value moeten ook de andere values (die een kortere key hebben) beginnen. Snap je? Ik hoop dat jij dat gefixt kan krijgen. Jij bent hier beter in dan ik heb ik al gemerkt.