如何在PHP中以33%的概率随机执行代码?

6

我不太确定如何编写这个功能:我想生成一个0到2之间的随机数,然后编写一个if语句,只有33%的时间会执行特定的代码。

这是我尝试做的:

if (rand(0, 3)=="2") { echo "Success" };

7
为了让概率为33%,您需要执行rand(0,2)。执行rand(0,3)会得到25%的概率。 - sshow
6个回答

11

这两个参数分别代表最小和最大随机值。如果你想要1/3的概率,那么你应该只允许3种可能性。从0到3的范围内有4个可能的值(0、1、2、3),所以它不能完全满足你的需求。此外,mt_rand()rand()更好。

所以应该这样写:

if (mt_rand(1, 3) == 2)
    echo "Success";

1
为此,rand()mt_rand()之间的差异很可能是不可察觉的;-) - Joey

3

PHP的rand()函数限制是包含的,所以你需要使用if(rand(0,2) == 2)


2

只有33%的时间会执行特定代码。

我想指出,使用随机数只会使代码有33%的概率执行,而不是1/3的时间都会执行。


1

您的代码将有25%的概率被执行。{0 1 2 3}是由4个数字组成的集合。您希望进行以下操作:

if(rand(1,3)==2)...


1

替换为

if (rand(0, 2)==2) { echo "Success"; }

1
我知道这是一个晚回答,但我会这样做。
if(!rand(0,2))
 {
   //do stuff
 }

对于任何所需的分数 1/x,将 0,2 替换为 0,x-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接