確率を指定したランダム
単純なランダム表示は簡単だけど、「特定のメッセージが表示されやすいランダム」のような「確率を指定したランダム」が必要になったのでメモ。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>rand</title>
</head>
<body>
<?php
$configs = array(
array(
'probability' => 60,
'message' => '60%の確率で表示されます。'
),
array(
'probability' => 30,
'message' => '30%の確率で表示されます。'
),
array(
'probability' => 10,
'message' => '10%の確率で表示されます。'
)
);
$count = count($configs);
$max = 0;
for ($i = 0; $i < $count; $i++) {
$max += $configs[$i]['probability'];
}
$rand = rand(1, $max);
$from = 0;
$to = 0;
$result = '';
for ($i = 0; $i < $count; $i++) {
$from = $to;
$to += $configs[$i]['probability'];
if ($from < $rand and $rand <= $to) {
$result = $configs[$i]['message'];
}
}
echo '<p>' . $result . '</p>';
?>
</body>
</html>
probability
の値は、合計100にならなくても動作に問題はありません。あくまでも「値の大きいものが表示されやすい」というだけ。
なお、基本的な考え方は確率変更可能ランダムテキストを参考にしています。(自分が理解しやすいようにコードを書き換えましたが。)こういうのが思いつく人は凄いなぁ…。