Re: Static array causing problem in recursion

From: Date: Fri, 04 Dec 2009 09:48:31 +0000
Subject: Re: Static array causing problem in recursion
References: 1  Groups: php.windows 
Request: Send a blank email to php-windows+get-29743@lists.php.net to get a copy of this message
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 : http://zend.com/zce.php?c=ZEND002498&r=213474731 ZOPA : http://uk.zopa.com/member/RQuadling

« previous php.windows (#29743) next »