最接近碰到一個問題 一個二維數組,需要按照庫存量排序,然后再按照門店距離排序。
發現了這樣一個這樣子的方法:
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
