ユーザ用ツール

サイト用ツール


よく使うphpのその6

よく使うphpのその6

確率計算

function array_rand_weighted($entries){
    $sum  = array_sum($entries);
    $rand = rand(1, $sum);
 
    foreach($entries as $key => $weight){
        if (($sum -= $weight) < $rand) return $key;
    }
}
// 抽選候補となる配列
$entries = array(
    "1to"    => 5,
    "2to"    => 20,
    "3to"    => 30,
    "hazure"  => 45,
);
 
// 抽選(1回)
$result_key = array_rand_weighted($entries);

echo $result_key;

1000回テスト

$result = array();
for($i=0; $i<1000; $i++){
    $key = array_rand_weighted($entries);
    @$result[$key]++;
}
print_r($result);

またこのような確率計算方法もあります。

// 3つの要素を用意してそれぞれの出没確率を設定
$first = array("text" => "first", "per" => 10);
$second = array("text" => "second",  "per" => 20);
$third = array("text" => "third",  "per" => 70);


// ランダムで抽出する方法
$array = array($first, $second, $third);
shuffle($array);


// 決められた確率に準じて、抽出する方法
$array = array($first, $second, $third);
$target = rand(1, 100);
foreach ($array as $val) {
    if ($target <= $val['per']) {
        break;
    } else {
        $target -= $val['per'];
    }
}
よく使うphpのその6.txt · 最終更新: 2015/06/17 17:06 by luis_lee