我有一个php文件,我想得到一个随机数,但我希望它有80%的机会成为1.然后20%要么是2,3或4.通常你可以做类似的事情这样:
rand(1, 4)
但正如我所解释的那样,我希望获得1
的机会更高。
答案 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
数学保持不变=)