使用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学习 函数 课件
Jun 15 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
PHP安全配置详细说明
Sep 26 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 PHP
PHP7创建销毁session的实例方法
Feb 03 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Python中常用的内置方法
2019/01/28 Python
Python 如何展开嵌套的序列
2020/08/01 Python
python math模块的基本使用教程
2021/01/16 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
校园新闻稿范文
2015/07/18 职场文书
物业公司管理制度
2015/08/05 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang