Avatar billede lopolla123 Nybegynder
12. maj 2005 - 12:06 Der er 5 kommentarer og
1 løsning

Rekursiv funktion - mangler return værdier?

Jeg er ved at lave en base, hvor jeg dynamisk kan lave træmenuer ved, at ID-numrene referer til hinanden.
Dvs.
menupunkt-1 har ID:1, og referer til 0 (dvs. ingenting)
menupunkt-2 har ID:2, og referer til 1 (dvs. første nivau og under ID: 1)
menupunkt-3 har ID:3, og referer til 2 (dvs. andet nivau og under ID: 2)
etc.....

Jeg skal bla kunne finde "vejen tilbage", dvs. jeg spørger ind i en rekursiv funktion, der svarer tilbage med vejen tilbage, fx.
ID NU: 1 -> 3 -> 7 -> 8

-------------------
Jeg bare ikke få funktionen til ar returnere værdier - hvad er fejlen?
-------------------

FUNKTION:

function find_pos_back($id, $list, $array_help_all)
{
    $p=0;
    reset($array_help_all);
    while($p<count($array_help_all))
    {
        if($array_help_all[$p][HELPID] == "$id")
        {
            $id_ref = "".$array_help_all[$p][HELPREFID]."";
        }

        $p++;
    }

    if($id_ref != "0")
    {
        $return_status = "FALSE";
        $list_here        = "$list,$id_ref";
        find_pos_back($id_ref,$list_here, $array_help_all);
    }

    else
    {
        $return_status = "TRUE";
    }

    if($return_status == "TRUE")
    {
        echo "$list";
        echo "\n";

        return($list);
    }
}

----------------

Script, der kalder

$array_help_all[0][HELPID]        = "1";
$array_help_all[0][HELPREFID]    = "0";
$array_help_all[1][HELPID]        = "2";
$array_help_all[1][HELPREFID]    = "1";
$array_help_all[2][HELPID]        = "3";
$array_help_all[2][HELPREFID]    = "2";
$array_help_all[3][HELPID]        = "4";
$array_help_all[3][HELPREFID]    = "2";
$array_help_all[4][HELPID]        = "5";
$array_help_all[4][HELPREFID]    = "1";
$array_help_all[5][HELPID]        = "6";
$array_help_all[5][HELPREFID]    = "0";

$p=0;
reset($array_help_all);
while($p<count($array_help_all))
{
    $id            = "".$array_help_all[$p][HELPID]."";
    $list        = "".$array_help_all[$p][HELPID]."";
    $pos        = find_pos_back($id,$list, $array_help_all);

    $p++;
}
Avatar billede nielle Nybegynder
12. maj 2005 - 12:37 #1
function find_pos_back($id, $list, $array_help_all)
{
    $p=0;
    reset($array_help_all);
    while($p<count($array_help_all))
    {
        if($array_help_all[$p][HELPID] == "$id")
        {
            $id_ref = "".$array_help_all[$p][HELPREFID]."";
        }

        $p++;
    }

    if ($id_ref != "0")
    {
        $list_here        = "$list,$id_ref";
        return find_pos_back($id_ref,$list_here, $array_help_all);
    }
    else
    {
        echo "$list";
        echo "\n";

        return($list);
    }
}
Avatar billede lopolla123 Nybegynder
12. maj 2005 - 13:46 #2
Den virker for smukt - hvad er det jeg gør forkert - jeg har også prøvet uden TRUE/FALSE - jeg fatter det simpelt hen ikke.....
Men det virker - mange tak :-)

Post et svar, så får du point....
Avatar billede nielle Nybegynder
12. maj 2005 - 15:27 #3
Din primære fejl var at du ikke havde et "return" foran det rekursive kald til:

find_pos_back($id_ref,$list_here, $array_help_all);

- skulle ændres til:

return find_pos_back($id_ref,$list_here, $array_help_all);
Avatar billede nielle Nybegynder
12. maj 2005 - 15:29 #4
Enten det, eller du skulle have fanget returværdien i en variabel og så have returneret denne. Som din løsning så ud, strandede returværdien bare der og kom aldrig videre tilbage langs stakken af rekursive kald.
Avatar billede lopolla123 Nybegynder
12. maj 2005 - 23:09 #5
aha....ok
De driller mig generelt lidt.
Ikke så meget det rekursive i funktionerne, men mere retur-værdierne - det kan være du får glæde af mig senere ;)

Tak for hjælpen :-)
Avatar billede nielle Nybegynder
13. maj 2005 - 18:06 #6
Altid glad for at hjælpe. :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester