関数をエコーして実行するPHPコードを30%の時間だけ作成するのに助けが必要です。
現在、以下のコードがありますが、機能していないようです。
if (mt_rand(1, 3) == 2)
{
echo '';
theFunctionIWantCalled();
}
関数をエコーして実行する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)
ここでは真のランダム性を扱っていないので。アルゴリズムが他の数値よりも1つの数値を選択している可能性は十分にあります。この質問のコメントで述べたように、アルゴリズムはランダムであるため、同じ数を何度も何度も選択している可能性があります。ただし、実際には、選択する数が多いほど、分布が均等になる可能性があります。選択できる数値が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";