PHPでランダムな一意の数値配列を生成する方法
PHPで重複のない(一意な)ランダムな数値の配列を生成したい場合は、range()関数とshuffle()関数を組み合わせて使用します。
基本的な仕組み
手順は以下の通りです。
- range():指定した範囲内の連続した数値を持つ配列を作成します。
- shuffle():配列の要素をランダムに並べ替えます。これにより、各数値が1回ずつ含まれた状態が保たれるため、重複のないランダムな配列になります。
- array_slice():シャッフル後の配列から必要な個数だけ要素を取り出します。
サンプルコード
以下に、10〜20の範囲から5つのランダムな一意の数値を取得するPHPコードの例を示します。
<!DOCTYPE html> <html> <body> <?php $limit_random_array_values = range(10, 20); shuffle($limit_random_array_values); $all_five_random_array_value = array_slice($limit_random_array_values ,0,5); print_r($all_five_random_array_value); ?> </body> </html>
実行結果
上記のコードを実行すると、以下のような出力が得られます(実行ごとに結果は異なります)。
Array ( [0] => 11 [1] => 14 [2] => 15 [3] => 12 [4] => 18 )
ポイント
この方法では、元の範囲内の各数値が必ず1回だけ使用されるため、rand()やmt_rand()を使って重複チェックを行う方法よりもシンプルかつ確実に一意の数値を取得できます。ただし、範囲全体より多くの要素を取り出そうとすると失敗するため、array_slice()で指定する個数は範囲のサイズ以下にしてください。
-
加重乱数(重み付き乱数)を生成する方法【Ruby実装例つき】
通常、乱数は「一様分布(uniform distribution)」に従います。これは、どの数値が選ばれる確率もすべて等しいという意味です。 しかし、特定の数値が他の数値よりも高い確率で選ばれるようにしたい場合は、別の戦略が必要になります。それが加重乱数ジェネレーター(重み付き乱数生成器)です。 実際の応用例としては、次のようなものが挙げられます。 ゲーム内のルートテーブル:敵が異なるアイテムを、それぞれ異なるドロップ率で落とす仕組み 抽選会:抽選券を多く持っている人ほど、当選する確率が高くなる仕組み シンプルな方法:配列を使う戦略 抽選会の例で考えてみると、すぐに思いつく解決策があります
-
Rubyで乱数とランダム文字列を生成する方法を徹底解説
Rubyで乱数やランダムな文字列を生成する方法を学びたいなら、ここがまさにうってつけの場所です。 この記事では、Rubyにおける乱数生成のさまざまなテクニックを、具体例とともにわかりやすく解説します。 乱数を使えば、配列からランダムに要素を選んだり、リストから当選者を抽選したり、サイコロの目をシミュレートしたりと、幅広い用途に活用できます。 Rubyには、性質の異なる複数の乱数生成方法が用意されています。 たとえば… randメソッドには3通りの使い方があります。 引数なしでrandを呼び出すと、0から1までの浮動小数点数(例: 0.4836732493)が返される 整数を引数に渡す(ran