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,因此它将继续执行其他操作