配列要素をランダムな順番に並べ替えて表示したり、1つまたは複数の要素をランダムに取り出したいことがあります。
配列をランダムに並べ替える(おみくじ)
配列をランダム順に並べ替えるには、shuffle関数が役立ちます。簡単なおみくじの例を紹介します。定義した配列をshuffle関数でシャッフル(ランダム順に並べ替え)した後、先頭の要素を表示しています。
<?php $ar = array("大吉", "中吉", "小吉", "凶"); shuffle($ar); echo $ar[0]; ?>
○実行結果
大吉
本当のおみくじは「凶が3割、大吉が2割」のように重みがついています。上記の配列は各要素が同じ確率で表示されますが、重みを付けるなら次のように要素数を増やす方法があります。
<?php $ar = array("大吉", "中吉", "小吉", "凶", "凶", "凶"); shuffle($ar); echo $ar[0]; ?>
○実行結果
凶
配列インデックスをランダムに取得する(抽選プログラム)
配列をシャッフルする代わりに配列のインデックスをランダムに取得する場合はarray_rand関数を使います。
<?php $ar = array("大吉", "中吉", "小吉", "凶"); $idx = array_rand($ar); echo $ar[$idx]; ?>
ここでは、ランダムに取得したインデックスを使って、その要素を表示しています。
○実行結果
大吉
2番目のパラメータに個数を指定すると複数のインデックスをランダムに取得できます。大勢の応募者からランダムに何人かの当選者を選ぶ抽選プログラムにも活用できます。
<?php $ar = array("田中次郎", "鈴木一郎", "高橋史郎", "小林一郎"); $idx = array_rand($ar, 2); $temp = "当選は次の方です。<br />"; foreach ($idx as $key) { $temp .= $ar[$key] . "<br />"; } echo $temp; ?>
もちろん、実行ごとに当選者は変わります。
○実行結果
当選は次の方です。 鈴木一郎 小林一郎