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自动更新新闻DIY
Oct 09 PHP
在同一窗体中使用PHP来处理多个提交任务
May 08 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
thinkphp循环结构用法实例
Nov 24 PHP
php简单图像创建入门实例
Jun 10 PHP
smarty高级特性之对象的使用方法
Dec 25 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
Symfony2联合查询实现方法
Mar 18 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
PHP7 其他语言层面的修改
Mar 09 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
计数器详细设计
2006/10/09 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
Django自定义manage命令实例代码
2018/02/11 Python
pytorch 数据集图片显示方法
2018/07/26 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
python实现学生成绩测评系统
2020/06/22 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
教师个人剖析材料
2014/02/05 职场文书
大学军训感想
2014/02/12 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript