4

私は次の配列を持っています:

public $percentage = array(
   0 => 20.30,
   1=> 19.96,
   2=> 14.15,
   3=> 45.59
);

//合計は100%

値のパーセンテージでキーを返すランダム関数が必要です。

たとえば、0を取得する可能性は20.30%、2を取得する可能性は14.15%で、最初のユーザーは0を取得し、2番目のユーザーは2を取得します。

使用を提案された機能を教えてください。

4

4 に答える 4

7

パーセンテージを累積確率に変換してから、乱数と比較します。

乱数がカテゴリに該当する場合は、結果を出力します。そうでない場合は、1つが見つかるまで次のものに移動します。これにより、配列に示されている確率のパーセンテージに基づいて数値を出力できます。

$percentage = array(
   0 => 20.30,
   1=> 19.96,
   2=> 14.15,
   3=> 45.59
);
$random = mt_rand(0,10000)/100;
foreach ($percentage as $key => $value) {
    $accumulate += $value;
    if ($random <= $accumulate) {
        echo $key;
        break;
    }
}
于 2013-03-24T10:20:39.977 に答える
2
$random_n = mt_rand(0,10000)/100;
while(true){
  if($random_n <= $percentage[0])
    echo 0; break;
  else if($random_n <= $percentage[1])
    echo 1; break;
  else if($random_n <= $percentage[2])
    echo 2; break;
  else if($random_n <= $percentage[3])
    echo 3; break;
  else
    $random_n = mt_rand(0,10000)/100; //generate a new random #
}
于 2013-03-24T10:16:43.457 に答える
1
<?php
$percentage = $tmp = array(
   0 => 20.30,
   1=> 19.96,
   2=> 14.15,
   3=> 45.59
);

sort($tmp);

$rand = mt_rand(0,100);
foreach($tmp as $percent) {
    if($percent >= $rand) {
        echo array_search($percent,$percentage);
        die();
    }
}

echo (count($percentage) - 1);
于 2013-03-24T10:19:57.147 に答える
0

私は次のようなことをします:

  1. 1から10000までの乱数を取ります(有効数字が4桁あるため)
  2. 数値が1から2030の場合はゼロ、2031から(2031 + 1996)の場合は1などです。
  3. ..。
  4. 利益
于 2013-03-24T10:19:18.603 に答える