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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM