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

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. '1' => array(
  7. 'num1' => 5,
  8. 'num2' => 50
  9. ),
  10. '2' => array(
  11. 'num1' => 4,
  12. 'num2' => 44
  13. ),
  14. '3' => array(
  15. 'num1' => 3,
  16. 'num2' => 78
  17. )
  18. );
  19. foreach ( $arr as $key => $row ){
  20. $num1[$key] = $row ['num1'];
  21. $num2[$key] = $row ['num2'];
  22. }
  23. array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr);
  24. print_r($arr);
  25. //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))