0

所以,这很奇怪,我有一个名为 treetrunk 的方法,它运行父子关系,如果 ids 作为“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(3) "146" [2]=> string(1) "0" } "

4

2 回答 2

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']);
} 

正如您在问题中发布的那样,您将传递150treeTrunk()函数,因此它会转到其他部分并为您提供null结果。该部分将在您传递给函数if时进行评估。0treeTrunk()

于 2013-08-20T05:02:06.130 回答
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 中按预期工作。

演示

于 2013-08-20T05:33:16.047 回答