Schönen guten Tag,
Ich möchte eine n-dimensionale Navigation ermöglichen und habe dabei ein Problem mit einem mehrdimensionalem Array als Rückgabewert einer rekursiven Funktion.
Der Quelltext:
Erklärung:
$pid steht für $parent_id und gibt den übergeordneten Navigationspunkt des aktuellen Navigationspunktes an.
Ich initialisiere also die Funktion mit dem Wert 0 für $pid (weil das dann die 1. Ebene sein muss). Ich speichere die Daten in einen Array $navipunkte. Gleich danach überprüfe ich, ob der jeweilige Navipunkt einen oder mehrere Unterpunkte besitzt und wenn ja, rufe ich wieder die Funktion auf, um wieder alle Navipunkte der jeweiligen Ebene einzulesen.
Dies geschieht mit folgenden Zeilen:
Das Problem:
Wenn ich die Navigation ausgeben will (geschieht mit der Liste), dann stehen in dem Array $navipunkte nur die 1. Ebene. die 2. und 3. ist einfach gelöscht.
Ich habe zum Test mal direkt vor dem return, also hier:
einzelne Navipunkte ausgegeben, um zu überprüfen, ob eventuell beim Einlesen der Navipunkte fehler auftreten... Fehlanzeige, werden alle ordnungsgemäß ausgegeben. Aber sobald ich den Array übergebe, fehlt alles bis auf die 1. Ebene.
Jemand eine Erklärung?
Viele Grüße,
KPJHK
Ich möchte eine n-dimensionale Navigation ermöglichen und habe dabei ein Problem mit einem mehrdimensionalem Array als Rückgabewert einer rekursiven Funktion.
Der Quelltext:
Code:
<?php
function test_give_navigation($kategorie,$ebene,$pid) {
global $conf_server;
global $conf_dbuser;
global $conf_dbpasswort;
global $conf_datenbank;
global $conf_prefix;
$navigationspunkte = new db($conf_server,$conf_dbuser,$conf_dbpasswort);
$navigationspunkte -> select_db($conf_datenbank);
$table = $conf_prefix."m_navigation_navipunkte";
$erg_navigationspunkte= $navigationspunkte -> sql("SELECT * FROM $table WHERE kategorie = '$kategorie' AND pid = $pid ORDER BY sortierung");
$i = 0;
while($navigationspunkte = mysql_fetch_assoc($erg_navigationspunkte)) {
$navi_array[$ebene][$i]['id'] = $navigationspunkte['id'];
$navi_array[$ebene][$i]['pid'] = $navigationspunkte['pid'];
$navi_array[$ebene][$i]['modul'] = $navigationspunkte['modul'];
$navi_array[$ebene][$i]['m_site'] = $navigationspunkte['m_site'];
$navi_array[$ebene][$i]['linktext'] = $navigationspunkte['linktext'];
$navi_array[$ebene][$i]['required_right'] = $navigationspunkte['required_right'];
$navi_array[$ebene][$i]['published'] = $navigationspunkte['published'];
$unterpunkte = new db($conf_server,$conf_dbuser,$conf_dbpasswort);
$unterpunkte -> select_db($conf_datenbank);
$table = $conf_prefix."m_navigation_navipunkte";
$erg_unterpunkte = $unterpunkte -> sql("SELECT * FROM $table WHERE kategorie = '$kategorie' AND pid = '".$navi_array[$ebene][$i]['id']."' ORDER BY sortierung");
if(mysql_num_rows($erg_unterpunkte) != 0)
test_give_navigation("mainmenu",$ebene + 1,$navi_array[$ebene][$i]['id']);
$i++;
}
return $navi_array;
}
$navipunkte = test_give_navigation('mainmenu',0,0);
?>
<ul>
<li><?php echo $navipunkte[0][0]['linktext']; ?></li>
<li><?php echo $navipunkte[0][1]['linktext']; ?>
<ul>
<li><?php echo $navipunkte[1][0]['linktext']; ?></li>
<li><?php echo $navipunkte[1][1]['linktext']; ?></li>
<li><?php echo $navipunkte[1][2]['linktext']; ?></li>
<li><?php echo $navipunkte[1][3]['linktext']; ?>
<ul>
<li><?php echo $navipunkte[2][0]['linktext']; ?></li>
</ul>
</li>
</ul>
</li>
<li><?php echo $navipunkte[0][2]['linktext']; ?></li>
</ul>
Erklärung:
$pid steht für $parent_id und gibt den übergeordneten Navigationspunkt des aktuellen Navigationspunktes an.
Ich initialisiere also die Funktion mit dem Wert 0 für $pid (weil das dann die 1. Ebene sein muss). Ich speichere die Daten in einen Array $navipunkte. Gleich danach überprüfe ich, ob der jeweilige Navipunkt einen oder mehrere Unterpunkte besitzt und wenn ja, rufe ich wieder die Funktion auf, um wieder alle Navipunkte der jeweiligen Ebene einzulesen.
Dies geschieht mit folgenden Zeilen:
Code:
$unterpunkte = new db($conf_server,$conf_dbuser,$conf_dbpasswort);
$unterpunkte -> select_db($conf_datenbank);
$table = $conf_prefix."m_navigation_navipunkte";
$erg_unterpunkte = $unterpunkte -> sql("SELECT * FROM $table WHERE kategorie = '$kategorie' AND pid = '".$navi_array[$ebene][$i]['id']."' ORDER BY sortierung");
if(mysql_num_rows($erg_unterpunkte) != 0)
test_give_navigation("mainmenu",$ebene + 1,$navi_array[$ebene][$i]['id']);
Das Problem:
Wenn ich die Navigation ausgeben will (geschieht mit der Liste), dann stehen in dem Array $navipunkte nur die 1. Ebene. die 2. und 3. ist einfach gelöscht.
Ich habe zum Test mal direkt vor dem return, also hier:
Code:
...
return $navi_array;
einzelne Navipunkte ausgegeben, um zu überprüfen, ob eventuell beim Einlesen der Navipunkte fehler auftreten... Fehlanzeige, werden alle ordnungsgemäß ausgegeben. Aber sobald ich den Array übergebe, fehlt alles bis auf die 1. Ebene.
Jemand eine Erklärung?
Viele Grüße,
KPJHK