使用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 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
PHP的curl实现get,post和cookie(实例介绍)
Jun 17 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
php实现微信支付之现金红包
May 30 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 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者的疑难问答(2)
2006/10/09 PHP
smarty中js的调用方法示例
2014/10/27 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
Android面试宝典
2013/08/06 面试题
实习单位接收函模板
2014/01/10 职场文书
英文求职信写作小建议
2014/02/16 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
全民创业工作总结
2015/08/13 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
新手初学Java网络编程
2021/07/07 Java/Android
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript