当前位置:首页 > PHP教程 > php数组 > 列表

php 多维数组排序 array_multisort函数用法

发布:smiling 来源: PHP粉丝网  添加日期:2015-12-10 15:30:08 浏览: 评论:0 

array_multisort函数是php自带对二维数据进行排序的函数,下面我们一起来看看多维数组排序 array_multisort函数用法,希望文章能够帮助到各位。

对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下:

array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数。

第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:

SORT_ASC - 默认,按升序排列。(A-Z)

SORT_DESC - 按降序排列。(Z-A)

随后可以指定排序的类型:

SORT_REGULAR - 默认。将每一项按常规顺序排列。

SORT_NUMERIC - 将每一项按数字顺序排列。

SORT_STRING - 将每一项按字母顺序排列

简单的情况,有两个数组:

  1. $arr1 = array(1,9,5);  
  2. $arr2 = array(6,2,4);  
  3. array_multisort($arr1,$arr2);  
  4. print_r($arr1); // 得到的顺序是1,5,9  
  5. print_r($arr2); // 得到的顺序是6,4,2 

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。

我们再加多一个数组看看会怎样:

  1. $arr1 = array(1,9,5);  
  2. $arr2 = array(6,2,4);  
  3. $arr3 = array(3,7,8);  
  4. array_multisort($arr1,$arr2,$arr3); 

查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。

另外也可以把每个数组想像成数据库表的一列。而对应着的1,6,3为一数据行,9,2,7为另一数据行。。。

array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。

具体可以用下面的程式来测试:

  1. $arr1 = array(1,9,5,9);  
  2. $arr2 = array(6,2,4,1);  
  3. $arr3 = array(3,7,8,0);  
  4. array_multisort($arr1,$arr2,$arr3); 

可以想像这里$arr3的结果是(3,8,0,7).

例子:

  1. <?php 
  2. //php 多维数组排序 array_multisort 的使用 
  3. $data[] = array('volume' => 67, 'edition' => 2); 
  4. $data[] = array('volume' => 86, 'edition' => 1); 
  5. $data[] = array('volume' => 85, 'edition' => 6); 
  6. $data[] = array('volume' => 98, 'edition' => 2); 
  7. $data[] = array('volume' => 86, 'edition' => 6); 
  8. $data[] = array('volume' => 67, 'edition' => 7); 
  9. // 生成排序字段数组 
  10. foreach ($data as $key => $row) { 
  11.     $volume[$key]  = $row['volume']; 
  12.     $edition[$key] = $row['edition']; 
  13. //phpfensi.com 
  14. //根据volume降序,edition升序 
  15. array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
  16. //排序后的数组 
  17. print_r($data); 
  18. exit
  19. ?> 

补充:看看两个实际例子.

1、一次对多个数组进行排序:

  1. $num1 = array(3, 5, 4, 3); 
  2. $num2 = array(27, 50, 44, 78); 
  3. array_multisort($num1, SORT_ASC, $num2, SORT_DESC); 
  4. print_r($num1); 
  5. print_r($num2); 
  6. //result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 ) 

2、对多维数组,以二位数组为例,进行排序:

  1. $arr = array
  2.     '0' => array
  3.         'num1' => 3, 
  4.         'num2' => 27  
  5.     ), 
  6.      
  7.     '1' => array
  8.         'num1' => 5, 
  9.         'num2' => 50 
  10.     ), 
  11.      
  12.     '2' => array
  13.         'num1' => 4, 
  14.         'num2' => 44 
  15.     ), 
  16.      
  17.     '3' => array
  18.         'num1' => 3, 
  19.         'num2' => 78 
  20.     )  
  21. ); 
  22. foreach ( $arr as $key => $row ){ 
  23.     $num1[$key] = $row ['num1']; 
  24.     $num2[$key] = $row ['num2']; 
  25. array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr); 
  26. print_r($arr); 
  27. //result:Array([0]=>Array([num1]=>3 [num2]=>78) [1]=>Array([num1]=>3 [num2]=>27) [2]=>Array([num1]=>4 [num2]=>44) [3]=>Array([num1]=>5 [num2]=>50))

Tags: php多维数组 array_multisort

分享到: