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 相关文章推荐
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
神盾加密解密教程(一)PHP变量可用字符
May 28 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
深入解析php中的foreach函数
2013/08/31 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
js返回前一页刷新本页重载页面
2014/07/29 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
python破解zip加密文件的方法
2018/05/31 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
django和vue实现数据交互的方法
2019/08/21 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
中专生自我鉴定
2013/12/17 职场文书
五一服装活动方案
2014/01/11 职场文书
秘书英文求职信范文
2014/01/31 职场文书
教师考核评语
2014/04/28 职场文书
继承权公证书范本
2015/01/23 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers