我正在运行一个函数,其中一部分需要选择一个随机数,但是,它不能在已经选择的数字的数组中。因此,如果选择的随机数在数组中,则需要选择一个新数字。我似乎真的在努力寻找看起来那么容易的东西
function choice() {
global $countries;
global $count;
global $answers;
global $choice;
$i = rand(0,$count-1);
if(in_array($i,$answers)) choice();
else {
$answers[] = $i;
$choice = $countries[$i]['capital_city'];
return $choice;
}
所以这里的当前逻辑是,它选择一个随机数,检查它是否在数组中,如果不是那么它设置变量并返回它,如果是,则通过重新启动函数生成一个新数字。发生的事情是当它在功能中找到一个时,它会返回一个空结果,而不是通过该函数返回。我做错了什么?
答案 0 :(得分:2)
如果你不需要使用resursion,你不能只使用while
循环吗?
function choice() {
global $countries;
global $count;
global $answers;
global $choice;
$i = rand(0,$count-1);
while ( in_array($i,$answers) ){
$i = rand(0,$count-1);
}
$answers[] = $i;
$choice = $countries[$i]['capital_city'];
return $choice;
}
或者使用此do while
取代while
;
do {
$i = rand(0,$count-1);
} while ( in_array($i,$answers) );
答案 1 :(得分:1)
在递归调用之前添加return
语句。
function choice() {
global $countries;
global $count;
global $answers;
global $choice;
$i = rand(0,$count-1);
if(in_array($i,$answers)) return choice();
else {
$answers[] = $i;
$choice = $countries[$i]['capital_city'];
return $choice;
}