PHP 数组按多个字段排序

最接近碰到一个问题 一个二维数组,需要按照库存量排序,然后再按照门店距离排序。

发现了这样一个这样子的方法:

 1 $array1 = array(
 2       0=>array('id'=>8,'name'=>'Apple','age'=> 18),
 3       1=>array('id'=>8,'name'=>'Bed','age'=>17),
 4       2=>array('id'=>5,'name'=>'Cos','age'=>16),
 5       3=>array('id'=>5,'name'=>'Cos','age'=>14)
 6 );
 7 function sortArrByManyField(){
 8   $args = func_get_args(); // 获取函数的参数的数组
 9   if(empty($args)){
10     return null;
11   }
12   $arr = array_shift($args);
13   if(!is_array($arr)){
14     throw new Exception("第一个参数不为数组");
15   }
16   foreach($args as $key => $field){
17     if(is_string($field)){
18       $temp = array();
19       foreach($arr as $index=> $val){
20         $temp[$index] = $val[$field];
21       }
22       $args[$key] = $temp;
23     }
24   }
25   $args[] = &$arr;//引用值
26   call_user_func_array('array_multisort',$args);
27   return array_pop($args);
28 }
29 $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC);
30 print_r($arr);

结果如下:

 1 array(4) {
 2       [0]=>array(3) {
 3             ["id"]=>int(5)
 4             ["name"]=>string(3) "Cos"
 5             ["age"]=>int(16)
 6           }
 7       [1]=>array(3) {
 8             ["id"]=>int(5)
 9             ["name"]=>string(3) "Cos"
10             ["age"]=>int(14)
11           }
12       [2]=>array(3) {
13             ["id"]=>int(8)
14             ["name"]=>string(5) "Apple"
15             ["age"]=>int(18)
16           }
17       [3]=>array(3) {
18             ["id"]=>int(8)
19             ["name"]=>string(3) "Bed"
20             ["age"]=>int(17)
21       }
22     }
 原文:https://blog.csdn.net/qq_33980878/article/details/84030679 
posted @ 2019-03-20 14:53  四月微风  阅读(4491)  评论(0编辑  收藏  举报