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