我想我需要一些关于递归的解释......我在论坛上看了一些相同的问题,但它对我没什么帮助。
这是我的功能:
public function tas ($nb_gift, array $winners)
{
if ( !empty( $nb_gift ) ){
$id_winner = rand( 10, 15 );
if ( !$this->_in_array_r($id_winner, $winners) ){
$existing_user = $this->getWinner( $id_winner );
}
if( !empty( $existing_user ) && $nb_gift > 0 ){
$winners[] = array( $existing_user, 'iphone5');
$this->tas($nb_gift - 1, $winners);
}
else {
if($nb_gift > 0)
{
$this->tas($nb_gift, $winners);
}
}
}
else {
//print_r($winners);
return $winners;
}
}
最后我有一个由获奖者组成的阵列。即使print_r工作,返回也不会让我回到我的数组。 该功能是否需要一些优化?
答案 0 :(得分:0)
您永远不会从第一个if
分支返回任何内容。如果您最初调用tas()
并且它进入第一个if
分支,它永远不会return
,因此调用者永远不会得到任何回复。
递归并不特别,真的。你调用一个函数,得到一个结果:
$winners = tas();
简单。在内部,这些函数可以调用其他函数:
function tas() {
return foo();
}
tas
无法自行调用,但它仍然受到返回数据的相同规则的约束:
function tas() {
if (...) {
foo(); // <-- doesn't return anything
} else {
return foo();
}
}
只需在上面的示例中用foo()
替换tas()
相同的概念,但包括递归。