1〜10の数字をかぶらずにランダムな個数取得する方法

ある幅の数字をかぶらずにランダムな個数取得したい場合の方法。

コード

以下のコードで取得できる。

<?
    // 数字の文字列として配列に格納
    $datalist = array(1,2,3,4,5,6,7,8,9,10);

    // 配列をシャッフル
    shuffle($datalist);

    // 1〜10個の数字を取得
    $tmp = array();
    for($j=0;$j<rand(1,10);$j++) {
        array_push($tmp, array_pop($datalist));
    }

    print_r(tmp);
?>
解説

取得したい数の幅で配列を作成して、それをシャッフルすることで取得できる値をランダムにする。取得する個数をランダムにするためにfor文の最大値をランダムに決定し、シャッフルした配列から最大値分をpopで取得する。こうすることで、値がかぶる心配が無くなる。

まとめ

テストデータを作成する際に、idをかぶらせたくないがランダムに複数個決まった幅の値が取得した際などに使用できる。配列を使えばかぶらないってことを覚えておくと便利だと思う。