2015-10-06 90 views
0

我想創建8個隨機整數,這是獨一無二的,在範圍介於0和99PHP:多個唯一的隨機整數在特定範圍內

有一個整齊的解決方案,比我想的一個?

<?php 


do { 

    $rnd1 = rand(0,99); 
    $rnd2 = rand(0,99); 
    $rnd3 = rand(0,99); 
    $rnd4 = rand(0,99); 
    $rnd5 = rand(0,99); 
    $rnd6 = rand(0,99); 

} while (($rnd1 == $rnd2) || 
     ($rnd1 == $rnd3) || 
     ($rnd1 == $rnd4) || 
     ($rnd1 == $rnd5) || 
     ($rnd1 == $rnd6) || 
     ($rnd2 == $rnd3) || 
     ($rnd2 == $rnd4) || 
     ($rnd2 == $rnd5) || 
     ($rnd2 == $rnd6) || 
     ($rnd3 == $rnd4) || 
     ($rnd3 == $rnd5) || 
     ($rnd3 == $rnd6) || 
     ($rnd4 == $rnd5) || 
     ($rnd4 == $rnd6) || 
     ($rnd5 == $rnd6) ); 


?> 
+0

'$範圍=範圍(0,99);洗牌($範圍內); $ rand_ints = array_slice($ range,0,8);' – Phylogenesis

回答

2

嘗試下面的代碼。
它將創建一個包含0到99之間的8個隨機值的數組,同時檢查它們是否已被添加以確保它們是唯一的。

$numbers = array(); 
while (count($numbers) <= 8) { 
    $x = mt_rand(0,99); 
    if (!in_array($x,$numbers)) { 
     $numbers[] = $x; 
    } 
} 
print_r($numbers); 

也看到這兩個Q & A的有關使用mt_randrand
Difference between mt_rand() and rand()
What's the disadvantage of mt_rand?

+1

另請注意,我們有['random_int'](http://php.net/manual/en/function.random-int.php) – PeeHaa

+0

好點@ PeeHaa雖然這將在PHP 7中可用 –

+1

我的解決方案比每次生成一個數字時都用'in_array'檢查更快。 –

-1
$rnds = []; 

do { 
    $newRnd = rand(0, 99); 
    $rnds[] = $newRnd; 
} while(in_array($newRnd, $rnds) && count($rnds) < 9); 

print_r($rnds); 
+0

如果有重複,這隻會做(do while)循環的另一個迭代,而不是實際上刪除/覆蓋它。用'5'存根'rand',你會看到我是正確的。 –

1

這是依賴於數組索引優化版本。這個解決方案的複雜性是線性的,而不像@ AlexAndrei的回答中那樣。它依靠使用數組索引作爲保證沒有重複,所以不需要添加in_array的開銷。

$random_numbers = []; 

do { 
    $rand = rand(0, 99); 
    $random_numbers[$rand] = $rand; 
} while(count($random_numbers) < 9); 

$random_numbers = array_values($random_numbers); // This strips the keys 

print_r($random_numbers); 

如果您使用的是foreach你甚至可以刪除array_values調用,它也將提高代碼的速度,但在數組中的號碼將是以下形式:[ a => a, b => b, ... ]

+0

儘管你可以使用'mt_rand()'而不是'rand()',這應該由於mt_rand()更高的熵而在理論上加快了平均生成過程。 –