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