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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
PHP 面向对象 final类与final方法
May 05 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
php实现可逆加密的方法
Aug 11 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
php微信开发之图片回复功能
Jun 14 PHP
Laravel中10个有用的用法小结
May 06 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桌面中心(四) 数据显示
2007/03/11 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
python格式化字符串实例总结
2014/09/28 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
带你认识Django
2019/01/15 Python
Python实现图片识别加翻译功能
2019/12/26 Python
基于keras中的回调函数用法说明
2020/06/17 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
论文致谢词范文
2015/05/14 职场文书
房产证明范本
2015/06/19 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书