如何使用PHP的array_multisort对多维数组排序得到指定结果
错误原因
- 原代码的
array_multisort仅传入了排序依据数组,未传入需要被排序的目标数据,原$arr不会被修改 - 本次排序的核心目标是调整
t1/t2/t3/t4/t5这组键的顺序,而非外层两个子数组的顺序,直接对原$arr排序不符合需求 - 最终输出需要提取
sum字段作为直接值,原嵌套结构需要做转换
正确实现代码
<?php $arr = [ [ "t1" => ["sum" => 3], "t2" => ["sum" => 8], "t3" => ["sum" => 3], "t4" => ["sum" => 1], "t5" => ["sum" => 8] ], [ "t1" => ["sum" => 6], "t2" => ["sum" => 2], "t3" => ["sum" => 4], "t4" => ["sum" => 4], "t5" => ["sum" => 1] ] ]; // 提取所有待排序的键 $keys = array_keys($arr[0]); // 构造两个排序维度的数组 $sortByFirstSum = []; $sortBySecondSum = []; foreach ($keys as $key) { $sortByFirstSum[] = $arr[0][$key]['sum']; $sortBySecondSum[] = $arr[1][$key]['sum']; } // 按规则排序,同时调整键的顺序 array_multisort( $sortByFirstSum, SORT_DESC, SORT_NUMERIC, $sortBySecondSum, SORT_DESC, SORT_NUMERIC, $keys ); // 按排序后的键构造目标结构 $result = []; foreach ($keys as $key) { $result[0][$key] = $arr[0][$key]['sum']; $result[1][$key] = $arr[1][$key]['sum']; } print_r($result);
输出结果
Array ( [0] => Array ( [t2] => 8 [t5] => 8 [t1] => 3 [t3] => 3 [t4] => 1 ) [1] => Array ( [t2] => 2 [t5] => 1 [t1] => 6 [t3] => 4 [t4] => 4 ) )
内容的提问来源于stack exchange,提问作者Sergey Vorobev
相关产品推荐
相关产品推荐

