php中array_multisort对多维数组排序的方法


Posted in PHP onJune 21, 2020

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中array_multisort对多维数组排序的方法。分享给大家供大家参考。具体实现方法如下:

function sort_array($array, $keyid, $order='asc', $type='number') {
 if(is_array($array)) {
 foreach($array as $val) {
  $order_arr[] = $val[$keyid];
 }
 $order = ($order == 'asc') ? SORT_ASC: SORT_DESC;
 $type = ($type == 'number') ? SORT_NUMERIC: SORT_STRING;
 array_multisort($order_arr, $order, $type, $array);
 }
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
PHP二维数组的去重问题解析
Jul 17 PHP
php 不使用js实现页面跳转
Feb 11 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
php构造函数的继承方法
Feb 09 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
PHP浮点比较大小的方法
Feb 14 PHP
thinkphp 验证码 的使用小结
May 07 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 PHP
php获取文件类型和文件信息的方法
Jul 10 #PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 #PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 #PHP
codeigniter实现get分页的方法
Jul 10 #PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 #PHP
php基于Snoopy解析网页html的方法
Jul 09 #PHP
php生成固定长度纯数字编码的方法
Jul 09 #PHP
You might like
Cannot modify header information错误解决方法
2008/10/08 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
对Python信号处理模块signal详解
2019/01/09 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python处理大日志文件
2019/07/23 Python
String这个类型的class为何定义成final?
2012/11/13 面试题
这段代码难道不该打印出56吗
2013/02/27 面试题
中英文自我评价常用句型
2013/12/19 职场文书
2014年乡镇工作总结
2014/11/21 职场文书