From: Midhun Girish on
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
From: Richard Quadling on
2009/12/4 Midhun Girish <midhungirish(a)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
From: Midhun Girish on
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(a)googlemail.com>wrote:

> 2009/12/4 Midhun Girish <midhungirish(a)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
>
From: Richard Quadling on
2009/12/4 Midhun Girish <midhungirish(a)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(a)googlemail.com>
> wrote:
>>
>> 2009/12/4 Midhun Girish <midhungirish(a)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
>
>

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
From: Midhun Girish on
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(a)googlemail.com>wrote:

> 2009/12/4 Midhun Girish <midhungirish(a)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(a)googlemail.com>
> > wrote:
> >>
> >> 2009/12/4 Midhun Girish <midhungirish(a)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
> >
> >
>
> 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
>
 |  Next  |  Last
Pages: 1 2
Prev: UNSUBSCRIBE me please
Next: cgi