最接近碰到一个问题 一个二维数组,需要按照库存量排序,然后再按照门店距离排序。
发现了这样一个这样子的方法:
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