Eredeti
<?php
$nav = [
[
'name' => 'Home',
'title' => 'Homepage',
// ...something else...
'sub' => [
[
'name' => 'sub11',
'title' => null,
// ...something else...
'sub' => [
[
'name' => 'sub111',
'title' => 'This is the Sub 111',
],
],
],
[
'name' => '',
'title' => 'This is the Sub 12',
'sub' => [
[
'name' => null,
'title' => 'This is the Sub 121',
],
],
],
],
],
[
'name' => 'sub2',
'title' => 'This is the Sub 2',
'sub' => [
[
'name' => 'sub21',
'title' => 'This is the Sub 21',
],
],
],
];
function has_submenu($menu): bool
{
return is_array($menu)
&& isset($menu['sub'])
&& !empty($menu['sub'])
&& is_array($menu['sub']);
}
function print_menu(array $menu, int $level = 0)
{
$ident = '';
foreach ($menu as $element) {
$ident = str_pad($ident, $level);
echo $ident.'Name: '.($element['name'] ?? '(empty)').PHP_EOL;
echo $ident.'Title: '.($element['title'] ?? '(empty)').PHP_EOL;
echo $ident.'Url: '.($element['url'] ?? '(empty)').PHP_EOL;
echo $ident.'Submenu:'.(has_submenu($element) ? '' : ' (empty)' ).PHP_EOL;
if (has_submenu($element)) {
print_menu($element['sub'], $level += 4);
}
$level -= 4;
}
}
print_menu($nav);
| 1 | <?php |
| 2 | $nav = [ |
| 3 | [ |
| 4 | 'name' => 'Home', |
| 5 | 'title' => 'Homepage', |
| 6 | // ...something else... |
| 7 | 'sub' => [ |
| 8 | [ |
| 9 | 'name' => 'sub11', |
| 10 | 'title' => null, |
| 11 | // ...something else... |
| 12 | 'sub' => [ |
| 13 | [ |
| 14 | 'name' => 'sub111', |
| 15 | 'title' => 'This is the Sub 111', |
| 16 | ], |
| 17 | ], |
| 18 | ], |
| 19 | [ |
| 20 | 'name' => '', |
| 21 | 'title' => 'This is the Sub 12', |
| 22 | 'sub' => [ |
| 23 | [ |
| 24 | 'name' => null, |
| 25 | 'title' => 'This is the Sub 121', |
| 26 | ], |
| 27 | ], |
| 28 | ], |
| 29 | ], |
| 30 | ], |
| 31 | [ |
| 32 | 'name' => 'sub2', |
| 33 | 'title' => 'This is the Sub 2', |
| 34 | 'sub' => [ |
| 35 | [ |
| 36 | 'name' => 'sub21', |
| 37 | 'title' => 'This is the Sub 21', |
| 38 | ], |
| 39 | ], |
| 40 | ], |
| 41 | ]; |
| 42 | |
| 43 | function has_submenu($menu): bool |
| 44 | { |
| 45 | return is_array($menu) |
| 46 | && isset($menu['sub']) |
| 47 | && !empty($menu['sub']) |
| 48 | && is_array($menu['sub']); |
| 49 | } |
| 50 | function print_menu(array $menu, int $level = 0) |
| 51 | { |
| 52 | $ident = ''; |
| 53 | foreach ($menu as $element) { |
| 54 | $ident = str_pad($ident, $level); |
| 55 | echo $ident.'Name: '.($element['name'] ?? '(empty)').PHP_EOL; |
| 56 | echo $ident.'Title: '.($element['title'] ?? '(empty)').PHP_EOL; |
| 57 | echo $ident.'Url: '.($element['url'] ?? '(empty)').PHP_EOL; |
| 58 | echo $ident.'Submenu:'.(has_submenu($element) ? '' : ' (empty)' ).PHP_EOL; |
| 59 | if (has_submenu($element)) { |
| 60 | print_menu($element['sub'], $level += 4); |
| 61 | } |
| 62 | $level -= 4; |
| 63 | } |
| 64 | } |
| 65 | print_menu($nav); |