2011-02-28 56 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