[英]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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.