以前比较少用这个函数,因为自己接触的业务里,处理稍微大一些的数组的时候几乎都是从db里取出来的,在db里就order by了。看同事代码时,突然发现这个php的排序方法,吓得我吃了一鲸哈哈。以前没用过都,我就去手册翻翻看。
这个函数用来排序很强大,有点类似于sql中的order by,更像order by 后边有多个列名的时候(就是先以第一个列排序,然后再排第二列顺序这样)。这个函数尤其在多维数组排序的时候很有用。
php参考手册:http://php.net/manual/zh/function.array-multisort.php
手册里头这句话,对于理解这个函数的用法很重要:输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。
简单举个例子:
$arr1 = array(5,4,3,1,1);
$arr2 = array(1,2,3,4,5);
array_multisort($arr1, $arr2);
结果发现$arr1的顺序是1,1,3,4,5,$arr2的顺序是4,5,3,2,1。
排序时类似这样:把这两个数组倒过来,arr1、arr2是一张表的表头,如下所示。
arr1 arr2
5 1
4 2
3 3
1 4
1 5
它类似于sql中的 order by arr1, arr2 。。
按照arr1排序时,发现有两个1,那么则按照arr2排序,因为默认是按照升序排,所以arr2中的4这一行排在第一行位置,arr2中的5这一行排在第二行。
结果就是这样:
arr1 arr2
1 4
1 5
3 3
4 2
5 1
相信能明白了吧哈哈~
这个排序,会比较有用的地方在于多维数组的排序,来举个例子。比如given一个数组是这样的,要使用array_multisort(),按照time大小进行降序排序。
$arr = array( array( ‘id‘ => 3, ‘nickname‘ => ‘james‘, ‘time‘ => 1428896897, ), array( ‘id‘ => 1, ‘nickname‘ => ‘wade‘, ‘time‘ => 1428896895, ), array( ‘id‘ => 2, ‘nickname‘ => ‘bosh‘, ‘time‘ => 1428896896, ), ); print_r($arr); // 先拆出来成各个数组 foreach($arr as $v){ $arr_id[] = $v[‘id‘]; $arr_nickname[] = $v[‘nickname‘]; $arr_time[] = $v[‘time‘]; } // 排序 array_multisort($arr_time, SORT_DESC, $arr_id, $arr_nickname); // 再合体到一个数组里 foreach($arr as $k => $v){ $arr[$k] = array( ‘id‘ => $arr_id[$k], ‘nickname‘ => $arr_nickname[$k], ‘time‘ => $arr_time[$k], ); } print_r($arr);
再举两个例子,这里就直接粘贴下手册里的两个例子,要好好理解,当然最后还是知道该什么时候用这个函数,怎么用它更高效了哈哈。
===============================
原文:http://www.cnblogs.com/firstForEver/p/5049169.html