私は次の配列を持っています:
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を取得します。
使用を提案された機能を教えてください。
パーセンテージを累積確率に変換してから、乱数と比較します。
乱数がカテゴリに該当する場合は、結果を出力します。そうでない場合は、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;
}
}
$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 #
}
<?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);
私は次のようなことをします: