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 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
php网页病毒清除类
Dec 08 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php基础教程
Aug 26 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
thinkphp分页实现效果
Oct 13 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
Smarty模板类内部原理实例分析
Jul 03 PHP
php生成短网址/短链接原理和用法实例分析
May 29 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模板,主要想体现一下思路
2006/12/25 PHP
php-msf源码详解
2017/12/25 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
原生JS实现LOADING效果
2015/03/16 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
python使用str & repr转换字符串
2016/10/13 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
Python实现常见的回文字符串算法
2018/11/14 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
python读取并写入mat文件的方法
2019/07/12 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python定义具名元组实例操作
2021/02/28 Python
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
Linux操作面试题
2015/02/11 面试题
PyQt QMainWindow的使用示例
2021/03/24 Python
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
搞笑结婚保证书
2015/05/08 职场文书
民事起诉书范本
2015/05/19 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
辞职离别感言
2015/08/04 职场文书
宾馆安全管理制度
2015/08/06 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
golang连接MySQl使用sqlx库
2022/04/14 Golang