Re: [PHP-WIN] Static array causing problem in recursion

[email protected] (Richard Quadling)
Newsgroups php.windows
Message-ID <[email protected]>
2009/12/4 Midhun Girish <[email protected]>
>
> 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.