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

时间:2013-08-20 04:57:56

标签: 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); //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”}“

2 个答案:

答案 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中按预期停止工作。

Demo