使用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 破解防盗链图片函数
Dec 09 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
php数组冒泡排序算法实例
May 06 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
php扩展开发入门demo示例
Sep 23 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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 nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
php实现微信支付之企业付款
2018/05/30 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
javascript基础知识
2016/06/07 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
javascript实现小型区块链功能
2019/04/03 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python的Tqdm模块的使用
2018/01/10 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
还款承诺书范文
2014/05/20 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python