所以,这很奇怪,我有一个名为treetrunk的方法,它运行父子关系,如果id是"branchPath",则应该返回一个数组-该方法似乎工作得很好,因为在我的终止条件下,var_dump显示了正确的数组。然而,如果我尝试调用该方法,返回的数组是"NULL"-我真的不明白。
模型方法:
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输出"array(3){[0]=>string(3)"148"[1]=>string(2)"146"[2]=>string(1)"0"}"
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']);
}
正如您的问题中所发布的,您正在将150
传递给treeTrunk()
函数,所以它会转到其他部分并给出null
结果。当您将0
传递给treeTrunk()
函数时,if
部分将进行评估。
应该是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中预期的那样停止工作。
演示