php代码点火器-var_dump显示数组,但返回为null


php codeigniter - var_dump shows array but return is null

所以,这很奇怪,我有一个名为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中预期的那样停止工作。

演示