VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • php实现数组按多个字段排序的方法介绍(附代码)

本篇文章给大家带来的内容是关于php实现数组按多个字段排序的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

最接近碰到一个问题 一个二维数组,需要按照库存量排序,然后再按照门店距离排序。

发现了这样一个这样子的方法:

  1. $array1 = array
  2.  
  3.       0=>array('id'=>8,'name'=>'Apple','age'=> 18), 
  4.  
  5.       1=>array('id'=>8,'name'=>'Bed','age'=>17), 
  6.  
  7.       2=>array('id'=>5,'name'=>'Cos','age'=>16), 
  8.  
  9.       3=>array('id'=>5,'name'=>'Cos','age'=>14) 
  10.  
  11. ); 
  12.  
  13. function sortArrByManyField(){ 
  14.  
  15.   $args = func_get_args(); // 获取函数的参数的数组 
  16.  
  17.   if(emptyempty($args)){ 
  18.  
  19.     return null; 
  20.  
  21.   } 
  22.  
  23.   $arr = array_shift($args); 
  24.  
  25.   if(!is_array($arr)){ 
  26.  
  27.     throw new Exception("第一个参数不为数组"); 
  28.  
  29.   } 
  30.  
  31.   foreach($args as $key => $field){ 
  32.  
  33.     if(is_string($field)){ 
  34.  
  35.       $temp = array(); 
  36.  
  37.       foreach($arr as $index=> $val){ 
  38.  
  39.         $temp[$index] = $val[$field]; 
  40.  
  41.       } 
  42.  
  43.       $args[$key] = $temp
  44.  
  45.     } 
  46.  
  47.   } 
  48.  
  49.   $args[] = &$arr;//引用值 
  50.  
  51.   call_user_func_array('array_multisort',$args); 
  52.  
  53.   return array_pop($args); 
  54. //phpfensi.com 
  55.  
  56. $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC); 
  57.  
  58. print_r($arr); 

结果如下:

  1. array(4) { 
  2.  
  3.       [0]=>array(3) { 
  4.  
  5.             ["id"]=>int(5) 
  6.  
  7.             ["name"]=>string(3) "Cos" 
  8.  
  9.             ["age"]=>int(16) 
  10.  
  11.           } 
  12.  
  13.       [1]=>array(3) { 
  14.  
  15.             ["id"]=>int(5) 
  16.  
  17.             ["name"]=>string(3) "Cos" 
  18.  
  19.             ["age"]=>int(14) 
  20.  
  21.           } 
  22.  
  23.       [2]=>array(3) { 
  24.  
  25.             ["id"]=>int(8) 
  26.  
  27.             ["name"]=>string(5) "Apple" 
  28.  
  29.             ["age"]=>int(18) 
  30.  
  31.           } 
  32.  
  33.       [3]=>array(3) { 
  34.  
  35.             ["id"]=>int(8) 
  36.  
  37.             ["name"]=>string(3) "Bed" 
  38.  
  39.             ["age"]=>int(17) 
  40.  
  41.       } 
  42.  
  43.     } 
  44.  

 

本篇文章给大家带来的内容是关于php实现数组按多个字段排序的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

最接近碰到一个问题 一个二维数组,需要按照库存量排序,然后再按照门店距离排序。

发现了这样一个这样子的方法:

  1. $array1 = array
  2.  
  3.       0=>array('id'=>8,'name'=>'Apple','age'=> 18), 
  4.  
  5.       1=>array('id'=>8,'name'=>'Bed','age'=>17), 
  6.  
  7.       2=>array('id'=>5,'name'=>'Cos','age'=>16), 
  8.  
  9.       3=>array('id'=>5,'name'=>'Cos','age'=>14) 
  10.  
  11. ); 
  12.  
  13. function sortArrByManyField(){ 
  14.  
  15.   $args = func_get_args(); // 获取函数的参数的数组 
  16.  
  17.   if(emptyempty($args)){ 
  18.  
  19.     return null; 
  20.  
  21.   } 
  22.  
  23.   $arr = array_shift($args); 
  24.  
  25.   if(!is_array($arr)){ 
  26.  
  27.     throw new Exception("第一个参数不为数组"); 
  28.  
  29.   } 
  30.  
  31.   foreach($args as $key => $field){ 
  32.  
  33.     if(is_string($field)){ 
  34.  
  35.       $temp = array(); 
  36.  
  37.       foreach($arr as $index=> $val){ 
  38.  
  39.         $temp[$index] = $val[$field]; 
  40.  
  41.       } 
  42.  
  43.       $args[$key] = $temp
  44.  
  45.     } 
  46.  
  47.   } 
  48.  
  49.   $args[] = &$arr;//引用值 
  50.  
  51.   call_user_func_array('array_multisort',$args); 
  52.  
  53.   return array_pop($args); 
  54. //phpfensi.com 
  55.  
  56. $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC); 
  57.  
  58. print_r($arr); 

结果如下:

  1. array(4) { 
  2.  
  3.       [0]=>array(3) { 
  4.  
  5.             ["id"]=>int(5) 
  6.  
  7.             ["name"]=>string(3) "Cos" 
  8.  
  9.             ["age"]=>int(16) 
  10.  
  11.           } 
  12.  
  13.       [1]=>array(3) { 
  14.  
  15.             ["id"]=>int(5) 
  16.  
  17.             ["name"]=>string(3) "Cos" 
  18.  
  19.             ["age"]=>int(14) 
  20.  
  21.           } 
  22.  
  23.       [2]=>array(3) { 
  24.  
  25.             ["id"]=>int(8) 
  26.  
  27.             ["name"]=>string(5) "Apple" 
  28.  
  29.             ["age"]=>int(18) 
  30.  
  31.           } 
  32.  
  33.       [3]=>array(3) { 
  34.  
  35.             ["id"]=>int(8) 
  36.  
  37.             ["name"]=>string(3) "Bed" 
  38.  
  39.             ["age"]=>int(17) 
  40.  
  41.       } 
  42.  
  43.     } 
  44.  

出处:http://www.phpfensi.com/php/20200207/12705.html

 


相关教程