php codeigniter-var_dump显示数组,但返回为null

php codeigniter-var_dump显示数组,但返回为null,php,codeigniter-2,Php,Codeigniter 2,所以,这很奇怪,我有一个名为treetrunk的方法,它运行一个父子关系,如果ID是“branchPath”,它应该返回一个数组——这个方法似乎工作得很好,因为在我的终止条件下,var_dump显示了正确的数组。但是,如果我尝试调用该方法,返回的数组是“NULL”-我真的不明白 模型方法: function treeTrunk($id){//1st id in is page id if($id == '0'){ var_dump($this->branchPath

所以,这很奇怪,我有一个名为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
$d=$this->pages\mdl->treeTrunk('150');

var_dump($d);// 您没有在
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()
函数,因此它将转到else部分并给出
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 $this->treeTrunk($q[0]['pageParent']);
而且还要去掉整数值周围的引号,这不仅看起来很糟糕,而且有时在PHP中也会像预期的那样停止工作


这不是因为在if语句查找“0”时发送“150”而返回null吗?因此,什么也不会回来。else部分做什么,递归地调用自己?那有没有得到任何回报?太棒了!~虽然我仍然不明白为什么var转储给了我想要的,但没有回报。。。我也不知道你可以再次调用方法-+1来教我新东西!“getWhere”获取id的父id-当它到达顶级页面时,将获取“0”。不过,返回递归调用仍然有效。我要这个。