[php] Recursieve functie returned niks

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Topicstarter
Zucht,

Hier zijn we maar weer eens....
Ik ben bezig met recursieve functies...

-gephp.nettted
-gegoogled
-gegeathersearched

Mijn probleem

Ik heb een simpel hierarchie tabelletje
ID
toplevel
parentID
hiername

Hierin heb ik een aantal produkten gezet voor de data

Nu heb ik een recursieve functie geschreven die opzich wel werkt
maar nu komt het probleem
Hij returned niks

zie code 1
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    function CalculateUp($hierID,$HierNow=array())
    {
        $mysql = $GLOBALS['mysql'];
        $Data = $mysql->fetch_object($mysql->query("SELECT * FROM ebase_hier WHERE hierID = '".$hierID."' "));
        if($Data->hierlevel==0)
        {
            $HierNow[].=$Data->hierID;
            CalculateUp($Data->parentID,$HierNow);
        }
        else
        {
            $HierNow[].=$Data->hierID;
            
            return $HierNow;
        }
    
    } //End function CalculateUp($hierID)


     $DataArray = CalculateUp(621);
     echo "<pre>";
        print_r($DataArray);
     echo "</pre>";


Output in DataArray is leeg

*$@%# zucht waarom

dit werkt overigens wel
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    function CalculateUp($hierID,$HierNow=array())
    {
        $mysql = $GLOBALS['mysql'];
        $Data = $mysql->fetch_object($mysql->query("SELECT * FROM ebase_hier WHERE hierID = '".$hierID."' "));
        if($Data->hierlevel==0)
        {
            $HierNow[].=$Data->hierID;
            CalculateUp($Data->parentID,$HierNow);
        }
        else
        {
            $HierNow[].=$Data->hierID;
            $GLOBALS['kaas'] = $HierNow;
            return $HierNow;
        }
    
    } //End function CalculateUp($hierID)


     CalculateUp(621);
     echo "<pre>";
        print_r($kaas);
     echo "</pre>";


Heeft iemand enig idee waarom die functie niks returned.

Ik heb natuurlijk wat scrippies gejat van inet en daarin werkt het wel..
Wat zie ik in hemelsnaam over het hoofd?

iemand.
8)7

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Twee dingen:
- Je hierNow-array wordt weliswaar in de laatste method-call gereturned, maar in de voorlaatste method-call doe je er dan niks mee (wellicht wil je return CalculateUp(...) ipv gewoon die call).
- Mocht je (ik geloof niet dat je dat wil) de hierNow modificeren en dan in "vorige calls" de wijziging willen kunnen zien, dan zal je met call-by-reference moeten werken (function CalculateUp($hierID, &$HierNow)).

Ik gok dat je naar het eerste puntje moet kijken iig :)

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

PHP:
1
$HierNow[].=$Data->hierID;


Moet dat niet zijn

PHP:
1
$HierNow[] = $Data->hierID;

Acties:
  • 0 Henk 'm!

Verwijderd

DizzyWeb schreef op 19 januari 2004 @ 00:17:
PHP:
1
$HierNow[].=$Data->hierID;


Moet dat niet zijn

PHP:
1
$HierNow[] = $Data->hierID;
dat dacht ik dus ook, maar na testen blijkt dat het wel gewoon werkt :)

Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Topicstarter
DizzyWeb

Hmm volgens mij maakt dat niet uit
Je voegt hem toe..is misschien beetje dubbel op maar dat is mijn probleem niet want dat doet hij wel.

Wat ik niet snap is wat ACM bedoelt met puntje 1 (hihi) ..
Uh ik deed net zoiets maar das waarschijnlijk niet wat je bedoelde want nu krijg ik een dikke loop
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?

    function CalculateUp($hierID,$HierNow=array())
    {
        $mysql = $GLOBALS['mysql'];
        $Data = $mysql->fetch_object($mysql->query("SELECT * FROM ebase_hier WHERE hierID = '".$hierID."' "));
        if($Data->hierlevel==0)
        {
            $HierNow[].=$Data->hierID;
            CalculateUp($Data->parentID,$HierNow);
        }
        else
        {
            $HierNow[].=$Data->hierID;
            //$GLOBALS['kaas'] = $HierNow;
            return CalculateUp($Data->parentID,$HierNow);
        }
    
    } //End function CalculateUp($hierID)
?>


Woeps
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 35 bytes) in /home/httpd/vhosts/komtwelgoed.nl/httpdocs/temp/test.php on line 9

Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Topicstarter
Ok van php.net

Dan werkt het wel netjes maar dan heb ik een volgend probleem
??

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    function CalculateUp($hierID)
    {
        static $HierNow=array();
            $mysql = $GLOBALS['mysql'];
            $Data = $mysql->fetch_object($mysql->query("SELECT * FROM ebase_hier WHERE hierID = '".$hierID."' "));
            if($Data->hierlevel==0)
            {
                $HierNow[].=$Data->hierID;
                CalculateUp($Data->parentID);
            }
            else
            {
                $HierNow[].=$Data->hierID;
            }       
                return  $HierNow;
    
    } //End function CalculateUp($hierID)


     $DataBack = CalculateUp(621);
    echo "back";
     echo "<pre>";
        print_r($DataBack);
     echo "</pre>";
    

     $DataBack1 = CalculateUp(612);
    echo "back";
     echo "<pre>";
        print_r($DataBack1);
     echo "</pre>";


Dan werkt het opzich wel maar als je die functie dan weer in een loop gebruikt blijft hij optellen??

zie voorbeeld

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Array
(
    [0] => 621
    [1] => 31
    [2] => 4
)

Array
(
    [0] => 621
    [1] => 31
    [2] => 4
    [3] => 612
    [4] => 7
    [5] => 2
)


bij het tweede array printje zie je dat de eerste values overgenomen zijn van de eerste keer dat de functie draaide..dus hij houdt ze vast

unsetten lukt schijnbaar ook niet.

He wat snap ik nou niet
Ik snap het toch ..
of niet
aa#@
|:(

Acties:
  • 0 Henk 'm!

  • Scaror
  • Registratie: September 2003
  • Laatst online: 02-09 22:39

Scaror

Don't watch this!

Wat ACM bedoelt is je eerste lap code, maar dan met

PHP:
8
return CalculateUp($Data->parentID,$HierNow);

[ Voor 4% gewijzigd door Scaror op 19-01-2004 01:02 ]

Pagina: 1