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与javascript的两种交互方式
Oct 09 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
基于php split()函数的用法详解
Jun 05 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
ThinkPHP连接数据库的方式汇总
Dec 05 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 PHP
实例分析10个PHP常见安全问题
Jul 09 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 中的一些经验积累
2006/10/09 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
PHP pear安装配置教程
2016/05/14 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
黄金酒广告词
2014/03/21 职场文书
工作检讨书怎么写
2014/10/10 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android