使用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企业级应用之常见缓存技术篇
Jan 27 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php实现有趣的人品测试程序实例
Jun 08 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
php实现用户登陆简单实例
Apr 04 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
调试php程序的简单步骤
Oct 04 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错误提示的关闭方法详解
2013/06/23 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
Python开发编码规范
2006/09/08 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
python和opencv实现抠图
2018/07/18 Python
python读取文件名并改名字的实例
2019/01/07 Python
Python assert语句的简单使用示例
2019/07/28 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python可视化text()函数使用详解
2020/02/11 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
python中count函数知识点浅析
2020/12/17 Python
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
网络编辑职责
2014/03/01 职场文书
综治工作汇报材料
2014/10/27 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
学生个人评语大全
2015/01/04 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS