Sven: Problem gelöst - Var.-raum, reset, usw.

Beitrag lesen

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