2014-04-30 89 views
0

是否可以在PHP中生成隨機數,例如從1到10,並且讓它更可能生成比更高數字更小的數字?生成具有不同概率的隨機數

+2

你需要爲你的隨機數定義一個分佈函數。有了這個功能,你可以編寫你的自定義隨機生成器 – hek2mgl

+0

沒有蘭德(1,10)以相同的概率從1到10生成數字來獲得每個數字,我希望它更可能產生1,2,3 ..比7,8,9。 – MrDi

+0

或者是一個快速和髒的概率轉換:'echo(rand(1,12)%10);'導致非均勻分佈,因爲0和1現在具有更高的概率。 – Samuel

回答

4

當然。只是做更多的隨機性:

//80% chance that it's going to be a number that's smaller or equal to 5 
if (rand(0, 10) <= 8) { 
    $number = rand(0, 5); 
} else { 
    $number = rand(6, 10); 
} 

演示代碼

<?php 

$numbers = array(); 

for ($i = 0; $i < 1000; $i++) { 
    if (rand(0, 10) <= 8) { 
     $number = rand(0, 5); 
    } else { 
     $number = rand(6, 10); 
    } 

    $numbers[$number] = (isset($numbers[$number]) ? $numbers[$number] + 1 : 1); 
} 

print_r($numbers); 

輸出

Array 
(
    [0] => 141 
    [1] => 147 
    [2] => 135 
    [3] => 137 
    [4] => 131 
    [5] => 148 
    [6] => 34 
    [7] => 27 
    [8] => 36 
    [9] => 33 
    [10] => 31 
) 

DEMO