PHP使用array_multisort对多个数组或多维数组进行排序


Posted in PHP onDecember 16, 2014

PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。

关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。

第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。

排序顺序标志:
■SORT_ASC - 按照上升顺序排序
■SORT_DESC - 按照下降顺序排序

排序类型标志:
■SORT_REGULAR - 将项目按照通常方法比较
■SORT_NUMERIC - 将项目按照数值比较
■SORT_STRING - 将项目按照字符串比较

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

看看两个实际例子:

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))

总结:

这里的重点就是,先把要排序的key存到一个一维数组中,然后就可以使用array_multisort()这个函数,将数组按照key进行排序了,当然,这里的排序你完全可以不适用array_multisort()这个函数,仅仅通过foreach遍历也能达到这个效果,但是既然php开发者给我们提供了更好的办法,我们就可以省去不必要的麻烦了。

PHP 相关文章推荐
php 页面执行时间计算代码
Dec 04 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
PHP图片上传代码
Nov 04 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
PHP中文编码小技巧
Dec 25 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
php使用ereg验证文件上传的方法
Dec 16 #PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 #PHP
php中最简单的字符串匹配算法
Dec 16 #PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 #PHP
php输出金字塔的2种实现方法
Dec 16 #PHP
smarty缓存用法分析
Dec 16 #PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 #PHP
You might like
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
Python判断两个对象相等的原理
2017/12/12 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
Python 读取位于包中的数据文件
2020/08/07 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
介绍一下linux的文件系统
2012/03/20 面试题
个人自我鉴定总结
2014/03/25 职场文书
完美的中文自荐信
2014/05/24 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
青年联谊会致辞
2015/07/31 职场文书
2016年情人节问候语
2015/11/11 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
Nebula Graph解决风控业务实践
2022/03/31 MySQL
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python