這個問題有點類似 Mysql 中 order by ,需要的就是在陣列中模擬不同欄位的排序。
假如有以下數組:
$beforeSort = [ "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ], ];
現在需要在數組中按照chinese
順序,假如有相同,就按math
順序,最後得到的應該是如下的數組:
$afterSort = [ "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ], "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], ];
請問大家有什麼不同的方法可以實現?
這是我自己使用的版本,使用方法:
列印結果:
可以將數組轉為集合,再處理。使用php的集合實現的sort方法,專治各種複雜排序
//現在需要在數組中按照 chinese 順序,假如有相同,就按 math 順序,最後得到的應該是如下的數組:
$beforeSort = [
];
$data_math = array_column($beforeSort,'math');
$data_chinese = array_column($beforeSort,'chinese');
,$datasultisort($data_chinese,SOSO_Scfore_multisort" ort );
雷雷
///借用樓上哥們答案
對多維數組排序,官方有一個函數可以實作 array_multisort
雷雷
$排序前 = [
雷雷];
foreach ($beforeSort as $key => $value) {
雷雷}
array_multisort($chinese, SORT_ASC, $math, SORT_ASC, $beforeSort);
print_r($beforeSort);