2013-08-20 44 views
0

所以,这很奇怪,我有这种方法称为treetrunk,运行一个父子关系,应该返回一个数组,如果ids作为“branchPath” - 该方法似乎作为一个var_dump在我的终止条件显示正确的数组工作得很好。但是,如果我尝试调用返回的数组是“空”的方法 - 我真的不明白..php codeigniter - var_dump显示数组,但返回为空

型号方法:

function treeTrunk($id){//1st id in is page id 
    if($id == '0'){ 
     var_dump($this->branchPath); //this shows perfect array 
     return $this->branchPath; //this returns null 
    } 
    else{ 
     $q = $this->getWhere(array('id'=>$id),null,null); 
     array_push($this->branchPath, $q[0]['pageParent']); 
     $this->treeTrunk($q[0]['pageParent']); 
    }  
} 

通过控制器调用:从

$d = $this->pages_mdl->treeTrunk('150'); 
var_dump($d); // <- this == NULL 

的var_dump (3){[0] => string(3)“148”[1] => string(3)“146”[2] => string(1)“0”}“

+0

不会因为你在“150”,而if语句寻找“0”发送这只是返回null?因此不会有任何回报。 else部分是做什么的,递归地调用它自己?这有没有得到任何回报? – StickMaNX

回答

1

你不会在else部分返回任何东西。

else{ 
    $q = $this->getWhere(array('id'=>$id),null,null); 
    array_push($this->branchPath, $q[0]['pageParent']); 
    $this->treeTrunk($q[0]['pageParent']); 
} 

应该

else{ 
    $q = $this->getWhere(array('id'=>$id),null,null); 
    array_push($this->branchPath, $q[0]['pageParent']); 
    return $this->treeTrunk($q[0]['pageParent']); 
} 

,张贴在你的问题,你是路过150treeTrunk()功能,所以它转到其他部分,并为您null结果。 if部分将评估何时通过0treeTrunk()函数。

+0

“getWhere”获取id的父ID - 当它到达顶级页面时它会获得'0'。虽然返回递归调用工作。我会采取的。 – user1284897

0

这应该是NULL

else{ 
    $q = $this->getWhere(array('id'=>$id),null,null); 
    array_push($this->branchPath, $q[0]['pageParent']); 
    $this->treeTrunk($q[0]['pageParent']); // You have to return this value as well 
} 

,当你不return该数组,否则你能指望它送回去?在那里添加return陈述。当你处理递归时,你的最后一次调用将该值返回给你的第二次调用,但是该调用是否将它返回给原始调用者?所以加一个return

return $this->treeTrunk($q[0]['pageParent']); 

并且还去掉引号整数值,它不仅看起来很糟糕,它有时会停止如预期中那么PHP工作。

Demo

+0

太棒了! 〜虽然我仍然无法包住我的头为什么var转储给了我我正在寻找的东西,但不是回报...我也不知道你可以返回另一个电话的方法 - +1教我一些新的东西! – user1284897

相关问题