PHP兰特,但获得另一个数字的机会更大?

时间:2014-12-04 14:59:29

标签: php random numbers generator

我有一个php文件,我想得到一个随机数,但我希望它有80%的机会成为1.然后20%要么是2,3或4.通常你可以做类似的事情这样:

rand(1, 4)

但正如我所解释的那样,我希望获得1的机会更高。

3 个答案:

答案 0 :(得分:10)

你可以使用另一个兰特:

$rand = rand(1, 10);

if ($rand <= 8)
  $value = 1;
else
  $value = rand(2,4);

答案 1 :(得分:4)

在[-10,4]中生成一个数字并转换:

$value = max(1, rand(-10, 4))

这将具有正确的分布并且应该表现良好。它不像涉及两次抽奖的解决方案那样容易处理,但它会更快。

答案 2 :(得分:1)

虽然@Bathsheba和@djidi提供的答案是最好的。这是一种不同的方法 由于1部分应为80%且2,3,4应为20%,因此我们将生成的随机数乘以3个数字等于20%(在这种情况下最终为15):

<?php

$random = rand(1,15);

$result = 0;
switch($random) {
    case 2:
    case 3:
    case 4:
        $result = $random;
        break;
    default:
        $result = 1;
}

echo $result;

获得1 = 12/15 = 0.8的机会 有机会获得2,3或4 = 1/15 = 0.066666666667

在芭丝谢芭的回答中:
获得1 = 12 * 1/15 = 12/15 = 0.8的机会(因为在-10和4之间有15个数字)
获得2,3或4 = 1/15 = 0.066666666667的机会(因为max()只有3个数字可以保持不变)

在Djidi的回答中:
获得1 = 8/10 = 0.8的机会 有机会获得2,3或4 = 2/10 * 1/3 = 2/30 = 1/15 = 0.066666666667

数学保持不变=)