首页 > 其他 > 详细

array_multisort函数的使用

时间:2015-12-16 16:53:30      阅读:252      评论:0      收藏:0      [点我收藏+]

  以前比较少用这个函数,因为自己接触的业务里,处理稍微大一些的数组的时候几乎都是从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);

 

再举两个例子,这里就直接粘贴下手册里的两个例子,要好好理解,当然最后还是知道该什么时候用这个函数,怎么用它更高效了哈哈。

技术分享

 

 

===============================

 

技术分享

 

array_multisort函数的使用

原文:http://www.cnblogs.com/firstForEver/p/5049169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!