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

时间:2012-08-05 20:09:15

标签: php

我需要帮助创建PHP代码来回显并且只有30%的时间运行一个函数。

目前我的代码如下,但似乎无效。

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

3 个答案:

答案 0 :(得分:1)

您是否正在尝试回复函数返回的内容?那将是

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个数字可供选择,可能会导致结果出现偏差。

答案 1 :(得分:1)

由于您使用rand,因此无法保证30%的时间都会调用它。在哪里你可以使用模数,这将有效地给你1/3的时间,不知道这对你有多重要但是......

$max = 27;

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

答案 2 :(得分:0)

由于模数不能与浮点数一起使用,你可以使用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";