php二维数组排序方法(array_multisort usort)


Posted in PHP onDecember 25, 2013

例如像下面的数组:

$users = array(
    array('name' => 'tom', 'age' => 20)
    , array('name' => 'anny', 'age' => 18)
    , array('name' => 'jack', 'age' => 22)
);

希望能按照age从小到大进行排序。笔者整理了两个方法出来,分享给大家。

1、使用array_multisort

使用这个方法,会比较麻烦些,要将age提取出来存储到一维数组里,然后按照age升序排列。具体代码如下:

$ages = array();
foreach ($users as $user) {
    $ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);

执行后,$users就是排序好的数组了,可以打印出来看看。如果需要先按年龄升序排列,再按照名称升序排列,方法同上,就是多提取一个名称数组出来,最后的排序方法这样调用:

array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

2、使用usort

使用这个方法最大的好处就是可以自定义一些比较复杂的排序方法。例如按照名称的长度降序排列:

usort($users, function($a, $b) {
            $al = strlen($a['name']);
            $bl = strlen($b['name']);
            if ($al == $bl)
                return 0;
            return ($al > $bl) ? -1 : 1;
        });

这里使用了匿名函数,如果有需要也可以单独提取出来。其中$a, $b可以理解为$users数组下的元素,可以直接索引name值,并计算长度,而后比较长度就可以了。

笔者更喜欢第二种方法,因为少了提取排序内容到一维数组的步骤,而且排序方法更为灵活。

PHP 相关文章推荐
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
支持oicq头像的留言簿(二)
Oct 09 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
一个简单的php路由类
May 29 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
php封装的smarty类完整实例
Oct 19 PHP
PHP的简单跳转提示的实现详解
Mar 14 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 #PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 #PHP
php对数组排序的简单实例
Dec 25 #PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 #PHP
php中apc缓存使用示例
Dec 25 #PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 #PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 #PHP
You might like
php 邮件发送问题解决
2014/03/22 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
php中in_array函数用法分析
2014/11/15 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
委托证明的格式
2014/01/10 职场文书
九年级英语教学反思
2014/01/31 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
小学生毕业评语
2014/12/26 职场文书
数学教师个人工作总结
2015/02/06 职场文书
护士岗位竞聘书
2015/09/15 职场文书
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL