Re: Static array causing problem in recursion

From: Date: Fri, 04 Dec 2009 12:18:20 +0000
Subject: Re: Static array causing problem in recursion
References: 1 2 3  Groups: php.windows 
Request: Send a blank email to php-windows+get-29745@lists.php.net to get a copy of this message
2009/12/4 Midhun Girish <midhungirish@gmail.com>: > Hello , > > Richard Quadling thank you so much.. your trick worked... :) now its > working.. heres the modified code... > >  public function getAllChildren($node,$level,$firstCall=false) >> >>   { >>       static $rootsarray=array(); >>       static $levelcount; >>       if($firstCall) { >>           $rootsarray=array(); >>       } >>       $levelcount=$level; >>       $child=self::getChild($node); >>       if($child==''||$levelcount==0) >>       { >>           return 1; >>       } >>       else >>       { >>           $levelcount--; >>           $rootsarray[]=$child; >>           self::getAllChildren($child,$levelcount,False); >>       } >>       return $rootsarray; >> >>   } >> > > and i call the function like : > >  $nodearray=tree::getAllChildren('W1',10,true); > > > Thank you so much for your support... > > Midhun Girish > > > On Fri, Dec 4, 2009 at 3:18 PM, Richard Quadling <rquadling@googlemail.com> > wrote: >> >> 2009/12/4 Midhun Girish <midhungirish@gmail.com> >> > >> > Hello guys, >> > I was trying to use a recursive function to do a tree traversal.. i used >> > a >> > static array to store the nodes at each recursion.. The function works >> > correctly if it is called only once during an execution.. but when i >> > call it >> > twice or more, the nodes get appended to the array...hers the var dump >> > of >> > the array... >> > Three:Array ( [0] => W4 ) >> > Two:Array ( [0] => W4 [1] => W3 [2] => W4 ) >> > One:Array ( [0] => W4 [1] => W3 [2] => W4 [3] => W2 [4] => W3 [5] => >> > W4 >> > ) >> > >> > I tried to reset() the array and all but not working..i am not able to >> > chnage the index of the $rootsarray  back to 0... the new elelnts are >> > added >> > at the end only...can anyone give me a push in the right direction?? Im >> > using PHP Version 5.2.9 in XAMPP... Hers the source... >> > >> >    public function getAllChildren($node,$level) >> >    { >> >        static $rootsarray=array(); >> >        static $levelcount; >> >        $levelcount=$level; >> >        $child=self::getChild($node); >> >        if($child==''||$levelcount==0) >> >        { >> >            return 1; >> >        } >> >        else >> >        { >> >            $levelcount--; >> >            $rootsarray[]=$child; >> >            self::getAllChildren($child,$levelcount); >> >        } >> >        return $rootsarray; >> > >> >    } >> > >> > Midhun Girish >> >> Of course. The array is static. So the content is maintained between >> calls. >> >> You need to know when to initialize it. >> >> Something like ... >> >>  public function getAllChildren($node,$level,$firstCall=True) >>   { >>       static $rootsarray=array(); >>       static $levelcount; >>       if($firstCall) { >>           $rootsarray=array(); >>       } >>       $levelcount=$level; >>       $child=self::getChild($node); >>       if($child==''||$levelcount==0) >>       { >>           return 1; >>       } >>       else >>       { >>           $levelcount--; >>           $rootsarray[]=$child; >>           self::getAllChildren($child,$levelcount,False); >>       } >>       return $rootsarray; >> >>   } >> >> >> -- >> ----- >> Richard Quadling >> "Standing on the shoulders of some very clever giants!" >> EE : http://www.experts-exchange.com/M_248814.html >> Zend Certified Engineer : ¡ȒpßÜ)€ycA.Ag >> http://zend.com/zce.php?c=ZEND002498&r=213474731 >> ZOPA : http://uk.zopa.com/member/RQuadling > > Why did you change the default to False? This now requires _ALL_ calls to the method to be amended. Unless you wanted to preserve the incorrect behaviour... Hmmm. BC is a PITA. -- ----- Richard Quadling "Standing on the shoulders of some very clever giants!" EE : http://www.experts-exchange.com/M_248814.html Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 ZOPA : http://uk.zopa.com/member/RQuadling

« previous php.windows (#29745) next »