エントリー

確率を指定したランダム

単純なランダム表示は簡単だけど、「特定のメッセージが表示されやすいランダム」のような「確率を指定したランダム」が必要になったのでメモ。

<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にならなくても動作に問題はありません。あくまでも「値の大きいものが表示されやすい」というだけ。

なお、基本的な考え方は確率変更可能ランダムテキストを参考にしています。(自分が理解しやすいようにコードを書き換えましたが。)こういうのが思いつく人は凄いなぁ…。

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed