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中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
ThinkPHP中使用ajax接收json数据的方法
Dec 18 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
Jul 25 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 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下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
python 自动重连wifi windows的方法
2018/12/18 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
python tkinter控件布局项目实例
2019/11/04 Python
pygame实现弹球游戏
2020/04/14 Python
在python image 中实现安装中文字体
2020/05/16 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
投标邀请书范文
2014/01/31 职场文书
教师四风问题整改措施
2014/09/25 职场文书
考研英语复习计划
2015/01/19 职场文书
交通安全温馨提示语
2015/07/14 职场文书
交通事故责任认定书
2015/08/06 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python