Re: Static array causing problem in recursion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hello all,

hey Richard Quadling you are right... sorry man.. i just noticed that just
now.

Actually i missed th line self::getAllChildren($child,$levelcount,False);
that you gave and thought it was a mistake...that y i updated the
script...you can imagine the condition of a person who searched over 250
pages in internet for this.. :)....i haven't updated the pages yet.... thank
you for the heads up.. i will take it as you gave...


Midhun Girish



On Fri, Dec 4, 2009 at 5:48 PM, Richard Quadling
<rquadling@xxxxxxxxxxxxxx>wrote:

> 2009/12/4 Midhun Girish <midhungirish@xxxxxxxxx>:
> > 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@xxxxxxxxxxxxxx>
> > wrote:
> >>
> >> 2009/12/4 Midhun Girish <midhungirish@xxxxxxxxx>
> >> >
> >> > 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
> >
> >
>
> 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
>

[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux