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 - 将每一项按字母顺序排列
简单的情况,有两个数组:
- $arr1 = array(1,9,5);
- $arr2 = array(6,2,4);
- array_multisort($arr1,$arr2);
- print_r($arr1); // 得到的顺序是1,5,9
- print_r($arr2); // 得到的顺序是6,4,2
我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。
我们再加多一个数组看看会怎样:
- $arr1 = array(1,9,5);
- $arr2 = array(6,2,4);
- $arr3 = array(3,7,8);
- array_multisort($arr1,$arr2,$arr3);
查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。
另外也可以把每个数组想像成数据库表的一列。而对应着的1,6,3为一数据行,9,2,7为另一数据行。。。
array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。
具体可以用下面的程式来测试:
- $arr1 = array(1,9,5,9);
- $arr2 = array(6,2,4,1);
- $arr3 = array(3,7,8,0);
- array_multisort($arr1,$arr2,$arr3);
可以想像这里$arr3的结果是(3,8,0,7).
例子:
- <?php
- //php 多维数组排序 array_multisort 的使用
- $data[] = array('volume' => 67, 'edition' => 2);
- $data[] = array('volume' => 86, 'edition' => 1);
- $data[] = array('volume' => 85, 'edition' => 6);
- $data[] = array('volume' => 98, 'edition' => 2);
- $data[] = array('volume' => 86, 'edition' => 6);
- $data[] = array('volume' => 67, 'edition' => 7);
- // 生成排序字段数组
- foreach ($data as $key => $row) {
- $volume[$key] = $row['volume'];
- $edition[$key] = $row['edition'];
- } //phpfensi.com
- //根据volume降序,edition升序
- array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
- //排序后的数组
- print_r($data);
- exit;
- ?>
补充:看看两个实际例子.
1、一次对多个数组进行排序:
- $num1 = array(3, 5, 4, 3);
- $num2 = array(27, 50, 44, 78);
- array_multisort($num1, SORT_ASC, $num2, SORT_DESC);
- print_r($num1);
- print_r($num2);
- //result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )
2、对多维数组,以二位数组为例,进行排序:
- $arr = array(
- '0' => array(
- 'num1' => 3,
- 'num2' => 27
- ),
- '1' => array(
- 'num1' => 5,
- 'num2' => 50
- ),
- '2' => array(
- 'num1' => 4,
- 'num2' => 44
- ),
- '3' => array(
- 'num1' => 3,
- 'num2' => 78
- )
- );
- foreach ( $arr as $key => $row ){
- $num1[$key] = $row ['num1'];
- $num2[$key] = $row ['num2'];
- }
- array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr);
- print_r($arr);
- //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))