使用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 相关文章推荐
第十五节--Zend引擎的发展
Nov 16 PHP
main.php
Dec 09 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
PHP CURL获取返回值的方法
May 04 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
CodeIgniter常用知识点小结
May 26 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 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读取MySQL数据代码
2008/06/05 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python如何读取bin文件并下发串口
2019/07/05 Python
numpy实现RNN原理实现
2021/03/02 Python
资产评估专业大学生求职信
2013/09/29 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
初中物理教学反思
2014/01/14 职场文书
土木工程求职信
2014/05/29 职场文书
一份文言文检讨书
2014/09/13 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
订货会邀请函
2015/01/31 职场文书
会议新闻稿
2015/07/17 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python