【发布时间】:2015-02-02 12:24:53
【问题描述】:
我有一个 php 文件,我想在其中获取一个随机数,但我希望它有 80% 的机会为 1。然后 20% 的机会为 2、3 或 4。通常你可以做类似的事情这个:
rand(1, 4)
但正如我解释的那样,我希望有更高的机会获得1。
【问题讨论】:
标签: php random numbers generator
我有一个 php 文件,我想在其中获取一个随机数,但我希望它有 80% 的机会为 1。然后 20% 的机会为 2、3 或 4。通常你可以做类似的事情这个:
rand(1, 4)
但正如我解释的那样,我希望有更高的机会获得1。
【问题讨论】:
标签: php random numbers generator
您可以使用另一个 rand :
$rand = rand(1, 10);
if ($rand <= 8)
$value = 1;
else
$value = rand(2,4);
【讨论】:
在 [-10, 4] 中生成一个数并变换:
$value = max(1, rand(-10, 4))
这将具有正确的分布并且应该表现良好。它不像涉及两次平局的解决方案那样容易处理,但它会更快。
【讨论】:
$value = abs(rand(-10, 4));
虽然@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 的机会(因为只有 3 个数字在 max() 不变时保留)
在 Djidi 的回答中:
获得机会 1 = 8/10 = 0.8
获得 2、3 或 4 的机会 = 2/10 * 1/3 = 2/30 = 1/15 = 0.066666666667
数学保持不变 =)
【讨论】: