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 相关文章推荐
PHP安装全攻略:APACHE
Oct 09 PHP
新闻分类录入、显示系统
Oct 09 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php跨服务器访问方法小结
May 12 PHP
PHP获取文件行数的方法
Jun 10 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
PHP addslashes()函数讲解
Feb 03 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 PHP
PHP获取类私有属性的3种方法
Sep 10 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
php中文字符截取防乱码
2008/03/28 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python 测试实现方法
2008/12/24 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
python能否java成为主流语言吗
2020/06/22 Python
flask开启多线程的具体方法
2020/08/02 Python
Python如何解除一个装饰器
2020/08/07 Python
Python collections模块的使用方法
2020/10/09 Python
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
外贸业务员求职自荐信分享
2013/09/21 职场文书
创意活动策划书
2014/01/15 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
大学活动总结格式
2014/04/29 职场文书
电子商务专业求职信
2014/07/10 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
前端JavaScript大管家 package.json
2021/11/02 Javascript