Denklücke / Problem mit mehrdimensionalem Array

Mik3e

Erfahrenes Mitglied
Hi zusammen,

Stehe vor folgendem Problem:
Ich möchte eine hierarchische Menüstruktur in einem Array mit den Parametern Name & Link hinterlegen und anschließend schön formatiert ausgeben.

Ich weiß, schreit nach Nested Sets, wäre hierfür allerdings überdimensioniert. Also muss Rekursion herhalten.

Das eigentliche Problem ist, dass ich die Ausgabe über die Rekursion nicht ganz raffe. Montag Morgen und ich steh mal wieder voll auf der Leitung.

Aber zu den Facts - Hier der Code:

Der Menü-Array:
PHP:
$menu=array();

$menu[0][0][0]['name']='Mainmenu 1';
$menu[0][0][0]['link']='#';

$menu[1][0][0]['name']='Mainmenu 2';
$menu[1][0][0]['link']='#';

$menu[1][1][0]['name']='Submenu 1';
$menu[1][1][0]['link']='#';

$menu[1][2][0]['name']='Submenu 2';
$menu[1][2][0]['link']='#';

$menu[1][2][1]['name']='SubSubmenu 1';
$menu[1][2][1]['link']='#';

$menu[3][0][0]['name']='Mainmenu 3';
$menu[3][0][0]['link']='#';

Und die rekursive Funktion zum Auslesen:
PHP:
function getMenu($menu) {
    foreach ($menu as $key => $value) {
		if (is_array($value)) {
        	getMenu($value);
		} else {
			echo $value['name'].'<br/>';
			echo $value['layer'].'<br/>';
			echo $value['link'].'<br/>';
		}
    }
}

getMenu($menu)
Leider funktioniert das ganze überhaupt nicht :)
Ich möchte folgenden Output erzeugen (Baum - Die Platzhalter fehlen in der funktion noch):

HTML:
Mainmenu 0
Mainmenu 1
---- Submenu 1.1
---- Submenu 1.2
-------- Submenu 1.2.1
Mainmenu 2
Hat irgendwer von Euch einen Plan, wie ich den Array am elegantesten strukturieren und eine passende Funktion dazu bauen könnte?

Danke & Ciao,
Mike
 
Mik3e hat gesagt.:
Hat irgendwer von Euch einen Plan, wie ich den Array am elegantesten strukturieren und eine passende Funktion dazu bauen könnte?
Gut, dass Du eine Änderung an der Struktur in Erwägung ziehst, Deine habe ich nämlich nicht so recht verstanden.

Hier ein Beispiel, wie ich es aufbauen würde:
PHP:
<?php
$menu=array();
$menu[0]['title']='Seite 1';
$menu[0]['link']='./Seite1';
$menu[0]['submenu'][0]['title']='Seite 1.1';
$menu[0]['submenu'][0]['link']='./Seite1/1';
$menu[0]['submenu'][1]['title']='Seite 1.2';
$menu[0]['submenu'][1]['link']='./Seite1/2';
$menu[0]['submenu'][1]['submenu'][0]['title']='Seite 1.2.1';
$menu[0]['submenu'][1]['submenu'][0]['link']='./Seite1/2/1';
$menu[1]['title']='Seite 2';
$menu[1]['link']='./Seite2';
$menu[1]['submenu'][0]['title']='Seite 2.1';
$menu[1]['submenu'][0]['link']='./Seite2/1';
$menu[1]['submenu'][1]['title']='Seite 2.2';
$menu[1]['submenu'][1]['link']='./Seite2/2';
$menu[2]['title']='Seite 3';
$menu[2]['link']='./Seite3';
$menu[3]['title']='Seite 4';
$menu[3]['link']='./Seite4';
$menu[3]['submenu'][0]['title']='Seite 4.1';
$menu[3]['submenu'][0]['link']='./Seite4/1';
$menu[3]['submenu'][1]['title']='Seite 4.2';
$menu[3]['submenu'][1]['link']='./Seite4/2';
$menu[4]['title']='Seite 5';
$menu[4]['link']='./Seite5';

function parseMenu($menu, $ebene=0) {
    foreach($menu as $m) {
        echo str_repeat('--',$ebene);
        echo $m['title']." [".$m['link']."]<br>\n";
        if (isset($m['submenu']) && count($m['submenu'])>0) {
            parsemenu($m['submenu'],$ebene+1);
        }
    }
}
parseMenu($menu);
echo "<br>\n<br>\n<pre>";
print_r($menu);
echo "</pre>";
?>
Gruß hpvw
 

Neue Beiträge

Zurück