配列の要素をランダムに入れ替えたい場合、PHPでは[shuffle]の関数が用意されているが、この関数では配列のキーは維持できない。
配列のキーを維持したまま、ランダムに入れ替えたい時は[uasort](または[uksort])の機能を利用する。
// キーを保持したままランダムに要素を入れ替
// ユーザ定義のソート関数と、乱数生成関数を 組み合わせて利用する
uasort($array, function() {
return mt_rand(-1, 1);
});
一般的な[uasort]の使用例
// メーカーIDをキーとした、メーカー名の配列を定義
$array = [
1 => 'Toyota',
2 => 'Honda',
3 => 'Nissan',
99 => 'Other'
];
// 「Other」を最後尾に配置した上で、メーカー名の順にソート
uasort($array, function($a, $b) {
if ($a === 'Other') {
return 1;
}
if ($b === 'Other') {
return -1;
}
return strnatcmp($a, $b);
});
print_r($array);
// 出力結果
//Array
//(
// [2] => Honda
// [3] => Nissan
// [1] => Toyota
// [99] => Other
//)