Php 函数不从else返回数组

Php 函数不从else返回数组,php,function,cakephp,Php,Function,Cakephp,我有以下递归函数: public function get_referred_list_down($referral,$level){ if($level>1){ $users = $this->Invoice->User->find('list',array('conditions'=>array('User.referral'=>$referral),'fields'=>array('User.id','User.userna

我有以下递归函数:

public function get_referred_list_down($referral,$level){
    if($level>1){
        $users = $this->Invoice->User->find('list',array('conditions'=>array('User.referral'=>$referral),'fields'=>array('User.id','User.username')));
        $this->get_referred_list_down($users,$level-1);
    }else{
        $users = $this->Invoice->User->find('list',array('conditions'=>array('User.referral'=>$referral),'fields'=>array('User.id','User.username')));
    }
    return $users;
}
我称之为
$this->get_referenced_list_down('DSTL00004',2)

if
中,它返回以下数组:

Array
(
    [9] => DSTL00005
    [10] => DSTL00006
    [11] => DSTL00007
    [12] => DSTL00008
    [13] => DSTL00009
)
我已将其再次传递给函数,并在
else
中给出以下内容:

Array
(
    [14] => DSTL00010
    [15] => DSTL00011
    [16] => DSTL00012
    [17] => DSTL00013
)

但它返回的结果是
if
,而不是返回
else

的结果,这是通过在递归调用函数之前添加return来解决的,因此现在的代码如下所示:

public function get_referred_list_down($referral,$level){
        if($level>1){
            $users = $this->Invoice->User->find('list',array('conditions'=>array('User.referral'=>$referral),'fields'=>array('User.id','User.username')));
            return $this->get_referred_list_down($users,$level-1);
        }else{
            $users = $this->Invoice->User->find('list',array('conditions'=>array('User.referral'=>$referral),'fields'=>array('User.id','User.username')));
        }
        return $users;
    }

多亏了。

@Memor-X$引用变量在else条件下更新。所以结果是第二个数组,但返回语句每次都执行。我无法理解为什么每次都运行它。每次调用该函数时,$users都会发生更改again@DionisL是的,这是必须的行为。但为什么在if中也调用return呢?实际上在if中再次调用函数,所以在返回语句之前,它递归地调用函数。在第二个循环中,它执行else语句并返回。但它并没有像预期的那样工作。当您为“$this->get_referenced_list_down('DSTL00004',2);”调用它时,第一次$level>1将为true,它将再次调用自己,而这次$level>1将为false,因此它将继续执行其他操作