使用array mutisort 实现按某字段对数据排序


Posted in PHP onJune 18, 2013

array_multisort 的用法
一、先看最简单的情况。有两个数组:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
array_multisort($arr1,$arr2);
print_r($arr1); // 得到的顺序是1,5,9
print_r($arr2); // 得到的顺序是6,4,2
我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。

我们再加多一个数组看看会怎样:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
$arr3 = array(3,7,8);
array_multisort($arr1,$arr2,$arr3);

查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。
另外也可以把每个数组想像成数据库表的一列。而对应着的1,6,3为一数据行,9,2,7为另一数据行。。。
array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。

具体可以用下面的程式来测试:
$arr1 = array(1,9,5,9);
$arr2 = array(6,2,4,1);
$arr3 = array(3,7,8,0);
array_multisort($arr1,$arr2,$arr3);
可以想像这里$arr3的结果是(3,8,0,7)。

二、接下来讲解array_multisort的参数。
这个函数的参数很灵活。最简单的情况是如上面所示的以1个或n个数组作为参数,需要注意的是每个数组的项数要一样,否则会warning导致排序失效。
像这样array_multisort($arr1,$arr2,$arr3); 默认是所有数组都是升序排列,如果想对$arr2降序,并当作字符串去比较,就要写成:
array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);
每个array后面可以跟一个排序顺序标志或一个排序类型标志,或者两种标志同时出现。但是每种排序标志在每个数组后面只能出现一个。
详细如下:
排序顺序标志:

SORT_ASC - 按照上升顺序排序(默认)
SORT_DESC - 按照下降顺序排序

排序类型标志:
 
SORT_REGULAR - 将项目按照通常方法比较(默认)
SORT_NUMERIC - 将项目按照数值比较
SORT_STRING - 将项目按照字符串比较

实际作用:把数据从数据库中提取出来之后可能是一个数组,如果想按照那个字段来进行排列,就可以先把那个字段提取出了来,成为单独的一个数组,然后再使用array_multisort进行排序,以达到对原数据按某字段数据排序的目的,下面是个小例子,按成绩对小朋友们排序。

<?php
$a=array(array('name'=>'张三','score'=>60),

array('name'=>'李四','score'=>90),

array('name'=>'王二','score'=>80)

);

$score=array();

foreach($a as $k => $v){

$score[$k]=$v['score'];

}

array_multisort($score,$a);

var_dump($score);

var_dump($a);
?>

结果大家自己运行一下吧
PHP 相关文章推荐
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP 验证登陆类分享
Mar 13 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
php多个字符串替换成同一个的解决方法
Jun 18 #PHP
基于PHP读取csv文件内容的详解
Jun 18 #PHP
解析CodeIgniter自定义配置文件
Jun 18 #PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 #PHP
深入array multisort排序原理的详解
Jun 18 #PHP
解析PHP工厂模式的好处
Jun 18 #PHP
PHP实现邮件群发的源码
Jun 18 #PHP
You might like
PHP脚本的10个技巧(2)
2006/10/09 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python性能优化技巧
2015/03/09 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python远程连接MySQL数据库
2019/04/19 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
jupyter notebook 多行输出实例
2020/04/09 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
中专毕业生个人职业生涯规划
2014/02/19 职场文书
电台编导求职信
2014/05/06 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs