thewooleymammoth Posted November 11, 2009 Share Posted November 11, 2009 i have a recursive function which takes an array of arrays of data from the database and turns them into a menu of catagories which can be expanded. To accomplish this im using a recursive function that checks if its parent catagory is a catagory that is being expanded if so, it expands the catagory by calling the function again if not it is skipped. The problem is when i pass the new parent variable to the new function, it uses the old parent variable instead. I know my explanation is confusing, but i dont know how to express it any better, i will post my code and an example output and hopefully it will make sense, if it doesnt, please let me know Controller page <?php class ProductsController extends AppController { var $name = 'Products'; var $uses = array('Product', 'Catagory'); function index() { $this->redirect('/Products/browse/'); } function _menu($ex=NULL) { /* *Generate Menu */ // $ex=explode('-', $ex); $catss=$this->Catagory->find('all'); if($ex!=NULL) $ex=explode("-", $ex); else { $ex=array(); } foreach($catss as $cats){ foreach($cats as $key=>$cat) { $id=$cat['id']; $menu[$id]=$cat; } //$this->set('ex', $ex); //$this->set('menu', $menu); } function disp($menu, $p, $ex=array(), $html='') { foreach($menu as $key=>$m){ if(trim($m['parents'])==trim($p) && !empty($p)){ $np=$m['parents'].$m['names'].'/'; $html.="<div style='margin-left: 10px;'>"; if(in_array($m['id'], $ex)){ $expand=''; foreach($ex as $key=>$e) { if($e != $m['$id']) { $expand.="$e-"; } $expand=str_replace($m['id'].'-', '', $expand); } $html.= "<a href='/Products/Browse/$expand/".$m['id']."/'>".$m['names'].'</a> '.$p.' => '.$np.' <br /> '; $html.=disp($menu, $np, $ex, $html); } else { $expand=''; foreach($ex as $key=>$e) { $expand.="$e-"; } $expand.=$m['id']; $html.= "<a href='/Products/Browse/$expand/".$m['id']."/'>".$m['names'].'</a> <br /> </div> '; } $html.= " </div> "; return $html; } } } $out=disp($menu, 'root/', $ex); $this->set('out', $out); } function browse($ex=NULL, $prim=NULL){ $this->_menu($ex); } } ?> output for /products/browse/ <div style='margin-left: 10px;'> <a href='/Products/Browse/1/1/'>flowers</a> <br /> </div> output for /Products/Browse/1/1 <div style="margin-left: 10px;"> <a href="/Products/Browse//1/">flowers</a> root/ => root/flowers/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse//1/">flowers</a> root/ => root/flowers/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse/1-2/2/">red</a> <br/> </div> </div> </div> output for /products/browse/1-2/ <div style="margin-left: 10px;"> <a href="/Products/Browse/2-/1/">flowers</a> root/ => root/flowers/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse/2-/1/">flowers</a> root/ => root/flowers/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse/1-/2/">red</a> root/flowers/ => root/flowers/red/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse/2-/1/">flowers</a>root/ => root/flowers/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse/1-/2/">red</a> root/flowers/ => root/flowers/red/ <br/> <div style="margin-left: 10px;"> <a href="/Products/Browse/1-2-3/3/">Epic</a> <br/> </div> </div> </div> </div> i cant figure out why it will sometimes pass the variable and sometimes it will not. Any help appreciated, i know its confusing so please ask if you dont understand Link to comment https://forums.phpfreaks.com/topic/181153-cakephp-recursive-function-not-passing-variables-properly/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.