欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP 数组按多个字段排序

程序员文章站 2022-06-26 10:02:58
最接近碰到一个问题 一个二维数组,需要按照库存量排序,然后再按照门店距离排序。 发现了这样一个这样子的方法: 结果如下: ......

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

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

 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