どうも、ちょげ(@chogetarou)です。
連想配列(associative array)をランダムに並び替えてシャッフルする方法を紹介します。
方法

連想配列(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
)
コメント