0

したがって、10 進数で 2 つの数値があるとします (例: .75 と .25)。これらの 2 つの数値を取得し、「勝者」をランダムに選択する関数を作成しようとしていますが、これらの 2 つの数値のパーセンテージに基づいています。手短に言えば、.25 よりもピックされる可能性を高めるには、.75 の数字が必要です (.25 もピックされる可能性はありますが、25% の確率しかありません)。これを行うにはどうすればよいですか?

4

4 に答える 4

4
$prob = array(25, 75);

$total = array_sum($prob);

$rand = mt_rand(1, $total);

var_dump($rand);

foreach ($prob as $i => $p) {
    $rand -= $p;

    if ($rand <= 0) {
        $winner = $i;
        break;
    }
}

var_dump($winner);
于 2011-02-22T04:23:46.270 に答える
2

合計が常に1になるとは限らない場合でも、これは機能します。

$winner = ( (rand(0,1000) / 1000) <= ($first / ($first + $second)) ) ? $first : $second;
于 2011-02-22T05:51:20.393 に答える
1
$var1 = 25;
$var2 = 75;
$total = $var1 + $var2;

$rand = mt_rand(1, $total);

if($rand <= $var1)
    echo("Value one ({$var1}) Wins!");
else
    echo("Value two ({$var2}) Wins!");

そのようなものが機能するはずです。

于 2011-02-22T04:27:07.003 に答える
1

この単純なケースでは、次を使用できます。

 if (rand(0,1000)/1000 <= 0.25)
 {
     $winner = $first;   // 25% number
 }
 else {
     $winner = $second;  // 75% number
 }
于 2011-02-22T04:33:35.637 に答える