2011-02-28 57 views
3

我正在运行rand()3次,我想从函数的可能性中排除前两个结果。就像它命中1和5一样,我希望下一个rand()从其范围中排除1和5。我将如何做到这一点?PHP不包括来自rand()函数的数字

+6

那就不是随机的了,虽然。 :o) – deceze

+0

在之前xkcd和/或4.哦,同样,考虑'mt_rand'而不是'rand'。 – Charles

+0

@Charles你会忘记九,九,九,九,九,九。 – deceze

回答

5

如何:

do { 
    $rand_number = rand(); 

}while(in_array($rand_number, array(1,5)); 
0
$last[]; 

for ($i = 0; $i < 10; $i++) { 
    $min = getLow($last); 
    $max = getHigh($last); 

    $myrand = rand ($min, $max) 
    $last[i] = $myrand; 
} 

您将需要建立两个功能通过$最后数组itterate并返回你希望它返回......或者,如果你只希望变量对于最后两个,您可以在循环外部初始化$ min和$ max,并在每次迭代中设置它们。这将不断收紧你的随机范围。

另一种解决方案可能是

$last; 
While (true) { 
    $myRand = rand(); 
    if ($myRand != $last) { 
    $last = $myRand; 
    break; 
    } 

} 
1

如果要产生三个独特的随机(ISH)的数字,你可以使用:

$totalNumsNeeded = 3; 
$randoms = array(); 
while (count($randoms) < $totalNumsNeeded) { 
    $random = rand($min, $max); 
    if (!in_array($random, $randoms)) { 
     $randoms[] = $random; 
    } 
} 
+0

这是太低估了! :) – Legarndary