[PHPメモ][shuffle]配列のキーを維持したままShuffle

配列の要素をランダムに入れ替えたい場合、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
//)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です