所以,这很奇怪,我有一个名为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] =&gt; string(3)”148“[1] =&gt; string(3)”146“[2] =&gt; string(1) “0”}“
答案 0 :(得分: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']);
}
正如您在问题中发布的那样,您正在将150
传递给treeTrunk()
函数,因此它会转到其他部分并为您提供null
结果。 if
部分会在您将0
传递给treeTrunk()
函数时进行评估。
答案 1 :(得分: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中按预期停止工作。