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的配置文件php.ini
Oct 09 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
PHP中的traits简单使用实例
May 13 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
php简单的上传类分享
May 15 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
php用wangeditor3实现图片上传功能
Aug 22 PHP
php 的多进程操作实践案例分析
Feb 28 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
原生js实现放大镜
2017/02/20 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
Python深入学习之内存管理
2014/08/31 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Django实现自定义404,500页面教程
2017/03/26 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python的log日志功能及设置方法
2019/07/11 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
Python必须了解的35个关键词
2020/07/16 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
中文专业毕业生自荐信
2013/10/28 职场文书
企业宣传标语
2014/06/09 职场文书
物流专业求职信
2014/06/30 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
党员年度个人总结
2015/02/14 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android