只有30%的时间运行PHP函数


Run A PHP function only 30% of Time

我需要帮助创建PHP代码,以便在30%的时间内回显和运行函数。

目前我有下面的代码,但它似乎不起作用。

if (mt_rand(1, 3) == 2)
{
    echo '';
    theFunctionIWantCalled();
}

您是否试图回显函数返回的内容?那就是

if(mt_rand(1,100) <= 30)
{
    echo function();
}

您当前拥有的内容将返回一个空白语句,然后执行一个函数。我还更改了随机语句。由于这只是伪随机的,而不是真正的随机性,更多的选项会让你有更好的机会在30%的时间内命中它。

如果您打算回显一个空白语句,则执行一个函数

if(mt_rand(1,100) <= 30)
{
    echo '';
    function();
}

将是正确的。我再次更改了if语句,使其分布更加均匀。为了确保更均匀的分配,你甚至可以进行

if(mt_rand(1,10000) <= 3000)

因为我们在这里没有处理真正的随机性。算法完全有可能比其他数字多选择一个数字。正如这个问题的评论中所提到的,由于算法是随机的,它可以一次又一次地选择相同的数字。然而,在实践中,有更多的数字可供选择最有可能导致均匀分布。只有3个数字可供选择可能会扭曲结果。

由于您使用的是rand,因此不能保证它在30%的时间内被调用。你可以使用模量,它会有效地给你1/3的时间,不确定这对你有多重要,但。。。

$max = 27;
for($i = 1; $i < $max; $i++){
    if($i % 3 == 0){
        call_function_here();
    }
}

由于模数不适用于浮点运算,您可以使用fmod,此代码应该相当接近,您可以替换总迭代次数和百分比。。。

$total = 50;
$percent = 0.50;
$calls = $total * $percent;
$interval = $total / $calls;
$called = 0;
$notcalled = 0;
for($i = 0; $i <= $total; $i++){
    if(fmod($i, $interval) < 1){
        $called++;
        echo "Called" . "'n";
    }else{
        $notcalled++;
        echo "Not Called" . "'n";
    }
}
echo "Called:  " . $called . "'n";
echo "Not Called: " . $notcalled . "'n";