Prev: UNSUBSCRIBE me please
Next: cgi
From: Midhun Girish on 4 Dec 2009 02:17 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 4 Dec 2009 04:48 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 4 Dec 2009 05:15 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 4 Dec 2009 07:18 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 4 Dec 2009 07:41
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 > |