Hello,
so, der Grund ist jetzt klar:
function menu_format($parent)
{
global $menu;
$r = '';
print 'menu_format aufgerufen<br>';
foreach($GLOBALS['menu'] as $item)
{
...
$submenu = menu_format($item['id']);
...
}
return $r;
}
Ich habe die Funktion menu_format(), die sozusagen rekursiv ist, also
in der Funktion wird die Funktion wieder aufgerufen, usw..
In der Funktion globalisiere ich am Anfang $menu und beginne gleich
eine foreach()-schleife. hierbei wird $menu geresettet und dann
durchgegangen. Bekanntlich ist ja
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Wert: $value<br>\n";
}
das gleiche wie dasda:
foreach ($arr as $value) {
echo "Wert: $value<br>\n";
}
Rufe ich jetzt also in dieser Schleife wieder die Funktion auf, wird
die globalisierte Variable $menu wieder geresettet und neu durch-
gegangen. Ist der Durchgang fertig und die "Vaterfunktion" macht den
nächsten Durchlauf, ist die durchgegangene Variable ja bereits ge-
resettet und er glaubt dann irgendwie, er sei bereits das ganze Array
durchgegangen.
Abhilfe bringt folgendes:
function menu_format($parent)
{
$r = '';
print 'menu_format aufgerufen<br>';
foreach($GLOBALS['menu'] as $item)
{
.....
hier greife ich jeweils direkt auf die $GLOBALS zu. In anderen
Variablenräumen kann ich $menu nun also nach meinem Belieben resetten
oder sonstwas machen, und es hat keine Auswirkungen auf meine schleife
hier.
:)
Gruß,
Sven