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 相关文章推荐
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
php算法实例分享
Jul 14 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
PDO::query讲解
Jan 29 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
php中的buffer缓冲区用法分析
May 31 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 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
德劲1107的电路分析与打磨
2021/03/02 无线电
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
PHP可变变量学习小结
2015/11/29 PHP
php session 写入数据库
2016/02/13 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
js实现上传图片之上传前预览图片
2013/03/25 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
django 模型中的计算字段实例
2020/05/19 Python
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
客服服务心得体会
2013/12/30 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
老舍《猫》教学反思
2016/02/17 职场文书