<?php
header('Content-type: text/html; charset=UTF-8');
header('Content-Language: ja');
/**
* 設定
*/
// 以下の形式で、クジの確率と表示テキストを設定。
//【キー】 => array(【相対的な確率を表す数字】, '【表示する文字列】', '【表示する画像のファイル名】'),
// ※【キー】は、0以上の整数を連番で設定すること。
// ※ 完全なランダムに設定する場合は、すべての【相対的な確率を表す数字】を 1 にする。
$data = array(
0 => array(5, '特賞', 'special'),
1 => array(10, '1等', 'first'),
2 => array(20, '2等', 'second'),
3 => array(30, '3等', 'third'),
4 => array(35, 'ハズレ', 'lose'),
);
/**
* 初期化
*/
$sum = 0; //【クジの種類の総数】- 1
$total = 0; // 相対的な確率の合計
$random = 0; // 生成された乱数
$a = 0; //【確率の範囲の始まり】 - 1
$b = 0; //【確率の範囲の終わり】
$res = ''; // 結果
/**
* クジの実行
*/
// 【クジの種類の総数】- 1
$sum = count($data) - 1;
// 相対的な確率の合計
for ($i = 0; $i <= $sum; $i++) {
$total += $data[$i][0];
}
// microtime関数を使用して、乱数ジェネレータを初期化
mt_srand(microtime() * 100000);
// 乱数を生成
$random = (int)round(mt_rand(1, $total));
// 乱数が確率と当てはまる場合、変数$resに格納
for ($i = 0; $i <= $sum; $i++) {
if ($i != 0) $a += $data[$i-1][0];
$b = $a + $data[$i][0];
if ($a < $random && $random <= $b) $res = $data[$i];
}
/**
* 結果の表示
*/
if (!empty($res[0]) && !empty($res[1]) && !empty($res[2])) {
echo $res[0].'%の確率で'.$res[1].'があたりました。<br />';
echo '<img src="images/'.$res[2].'.png" alt="'.$res[1].'" width="240" height="50" />';
}
参考URL
引用させていただきました。ありがとうございます。