Verschachtelte Menüstruktur

kevkev

Erfahrenes Mitglied
Hallo,

Ich glaub ich hab grad nen Hänger, ich versuche folgende verschachtelte Menüstruktur hinzubekommen:

PHP:
$_c["s"][0] = array("Top", null);
$_c["s"][1] = array("Top-Sub", array(0));
$_c["s"][2] = array("Top-Sub-Sub", array(0,1));
$_c["s"][3] = array("Top-Sub-Sub-Sub", array(0,1,2));
$_c["s"][4] = array("Top-Sub-Sub-Sub", array(0,1,2));
$_c["s"][5] = array("Top-Sub-Sub2", array(0,1));
$_c["s"][6] = array("Top-Sub-Sub-Sub2", array(0,1,5));

Der Key von $_c["s"] definiert eine eindeutige ID, das erste Element im Array den Namen des aktuellen Elements und dahinter die komplette Zugehörigkeit im Menübaum.

Das sollte später so aussehen:
Top
-> Top-Sub
---> Top-Sub-Sub
------> Top-Sub-Sub-Sub
------> Top-Sub-Sub-Sub
---> Top-Sub-Sub2
------> Top-Sub-Sub-Sub2

Ich könnte anstatt des ganzen "Pfades" auch nur den parent angeben, nur das bekomme ich noch weniger hin.

Viell. könnt ihr mir helfen :).

Gruß
Kevin
 
Vielleicht bringt dich das schon so auf den richtigen Weg:

PHP:
$_c["s"][0] = array("Top", null);
$_c["s"][1] = array("Top-Sub", 0);
$_c["s"][2] = array("Top-Sub-Sub", 1);
$_c["s"][3] = array("Top-Sub-Sub-Sub", 2);
$_c["s"][4] = array("Top-Sub-Sub-Sub", 2);
$_c["s"][5] = array("Top-Sub-Sub2", 1);
$_c["s"][6] = array("Top-Sub-Sub-Sub2", 5);
 
Danke für die schnelle Antwort.
Kannst du mir noch einen Tipp geben, wie ich die ganze Struktur auslesen kann?
Ich habe das mal mit einem verschachtelten Array probiert, nur das bekomme ich auch nicht ganz hin :'(.
 
Ich mag die verschachtelten Dinger nicht wirklich, aber das sollte dir helfen:

PHP:
<?php
    function echoarray($var)
    {
        if(is_array($var)) {
            echo "<ul>\n";
            foreach($var as $value) {
                echo "<li>\n";
                echoarray($value);
                echo "</li>\n";
            }
            echo "</ul>\n";
        } else {
            echo $var;
        }
    }
?>
 
Wenn es für eine Webseite ist, dann definitiv über eine Datenbank.

Zumal du unter Umständen ja auch noch die Reihenfolge "manipuliren" willst und auch noch neben dem Namen die URL speichern musst.
 
Leider können wir aus Perfomancegründen das nicht in die Datenbank verlagern.

Habe es jetzt doch selbst hinbekommen :)

Hier mein Code:

PHP:
// Arraykey = Item-ID
// erstes Element = Parent-ID
$navi[1] = array(0, "Obst");
	$navi[2] = array(1, "bananenen");
		$navi[3] = array(2, "gelbe");
		$navi[4] = array(2, "grüne");
	$navi[5] = array(1, "äpfel");
		$navi[6] = array(5, "rote");
		$navi[7] = array(5, "grüne");
		$navi[8] = array(5, "blaue?");
		$navi[9] = array(5, "gelbe");

function navi ($arr, $parentid = 0) {
	foreach($arr as $k => $v){
    	if ($v[0]==$parentid) {
    		$pararr[$k] = $v;
    	}
    }

    $tmp_tree = array();
    foreach($pararr as $k => $v){
    	$tmp = '';
    	$tmp_tree[$k] = $v;
    	if ($tmp = navi($arr, $k)) {
    		$tmp_tree[$k]['nextlevel'] = $tmp;
    	}
    }
    return (array)$tmp_tree;
}

// Erstellt aus dem navi()-erstellen Array eine Sitemap
function sitemap ($arr){
	echo "<ul>";
	foreach($arr as $k => $v){
		echo "<li>".$v[1]."</li>";
		if (isset($v["nextlevel"])) {
			echo sitemap($v["nextlevel"]);
		}
	}
	echo "</ul>";
}


// Aufruf
echo sitemap(navi($_c["s"]));

Viel Spaß :)
 
Ok, jetzt versteh ich erst so recht wie Ihr das wollt.
Kam leider nicht so rüber.

Es wäre auch noch ein bisschen übersichtlicher gegangen:

PHP:
$navi[1] = "Obst";
$navi[1][1] = "bananen";
$navi[1][1][1] = "gelbe";
$navi[1][1][2] = "grüne";
$navi[1][1] = "äpfel";
$navi[1][2][1] = "rote";
$navi[1][2][2] = "grüne";
$navi[1][2][3] = "blaue?";
$navi[1][2][4] = "gelbe";
 
Zurück