2012-04-22 168 views
5

我需要得到一個隨機數是如何從2個不同的數字範圍中選擇1個隨機數?

之間
0 - 80 

120 - 200 

我可以做

$n1 = rand(0, 80); 
$n2 = rand(120, 200); 

但後來我需要n1n2之間做出選擇。不能做

$n3 = rand($n1, $n2) 

因爲這可能會給我一個號碼80 - 120之間,我需要避免。

如何解決這個問題?

+0

在你的問題的開始,你指定的'1-80'的範圍內,但代碼反映了一系列的'0-80'。你是什​​麼意思? – Sonic42 2012-04-22 22:04:15

+0

對不起 - 修正了它 – pepe 2012-04-22 22:05:56

回答

8

由於兩個範圍的大小不同(即使只用1號),以確保良好的隨機散佈,你需要這樣做:

$random = rand(0, 200 - 39); 
if ($random>=120-39) $random+=39; 

最快的方法。 :)

這種工作方式是假裝它是一個單一的範圍,如果它最終選擇一個數字超過第一個範圍,我們增加它以適應第二個範圍。這確保了完美的傳播。

+0

他修正了這個問題,兩者的相同範圍爲81(0-80和120-200) – Ozzy 2012-04-22 22:07:08

+0

啊,很容易修復。 :) – DanRedux 2012-04-22 22:07:51

+0

約定的2個隨機調用比一個要慢,但是你的實現使得第二個程序員很難遵循這個代碼,並且好處可能只有50-100ms?哪個不會超過我的成本:P – Ozzy 2012-04-22 22:15:28

5

由於兩個範圍都具有相同的大小,因此您可以簡單地使用rand(0, 1)來確定使用哪個範圍。

$n = rand(0, 1) ? rand(0, 80) : rand(120, 200); 
+0

好的解決方案!完全正確。 – Chris 2012-04-22 22:01:56

+0

不正確。它有時會選擇0。 :) – DanRedux 2012-04-22 22:03:19

+0

@ThiefMaster和你所說的'因爲兩個範圍都有相同的大小',所以選擇這兩個範圍中任何一個範圍內的數字的機率是相同的,因爲它的50%/範圍大小正確? – Ozzy 2012-04-22 22:05:01

1

PHP有一個新的功能,這就是所謂的範圍。非常易於使用,並且可以位於PHP手冊中。

它允許您輸入一個最小/最大數量來獲取範圍。

<?php 
echo range(0, 1000); 
? 

從技術上講,你也可以輸入自己的兩個數字作爲數字範圍。

1

得到兩個隨機數$ N1$ N2

$n1 = rand(0, 80); 
$n2 = rand(120, 200);

定義新陣列稱爲$ N3

$n3=array();

添加$ N1$ N2成array $ n3使用array_push()函數

array_push($n3,$n1,$n2);

使用array_rand()函數來查找隨機指標$從陣列$ find_index N3

$find_index=array_rand($n3,1);

顯示結果

echo $n3[$find_index];
相關問題