[PHP]連想配列をランダムに並び替えてシャッフルするには?

PHP

どうも、ちょげ(@chogetarou)です。

連想配列(associative array)をランダムに並び替えてシャッフルする方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

連想配列(associative array)をランダムに並び替えてシャッフルするには、array_keys()とshuffle()を使います。

まず、array_keys()で連想配列のキーを取得します。

次に、shuffle()を呼び出し、引数に連想配列のキーを指定します。

forEach()で連想配列のキーをループします。

forEach()の処理で新しい配列に、元の連想配列の値を格納します。

値を格納する際、キーはforEachのループ変数にします。

最後に、新しい配列を元の配列に代入します。

function shuffle_assoc(&$array) {
    //連想配列のキーを取得
    $keys = array_keys($array);

    //キーをシャッフル
    shuffle($keys);

    //キーをforEachでループ。処理で新しい配列に元の配列の値を格納。
    foreach($keys as $key) {
        $new[$key] = $array[$key];
    }

    //元の配列に新しい配列を代入
    $array = $new;
}

上記の処理で、元の連想配列(associative array)をランダムに並び替えてシャッフルできます。

使用例

<?php

function shuffle_assoc(&$array) {
    $keys = array_keys($array);

    //キーをシャッフル
    shuffle($keys);

    foreach($keys as $key) {
        $new[$key] = $array[$key];
    }

    $array = $new;
}

$numbers = [
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "four" => 4,
    "five" => 5,
];

shuffle_assoc($numbers);

print_r($numbers);
?>
出力:
Array
(
    [three] => 3
    [two] => 2
    [five] => 5
    [one] => 1
    [four] => 4
)

コメント

タイトルとURLをコピーしました