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
PHP语法速查表
Dec 06 PHP
PHP 采集心得技巧
May 15 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
一个简单的PHP验证码实现代码
May 10 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 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中smarty区域循环的方法
2015/06/11 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
vue中activated的用法
2021/01/03 Vue.js
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
python numpy 反转 reverse示例
2019/12/04 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
Python能做什么
2020/06/02 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
自动化专业个人求职信范文
2013/12/30 职场文书
大学生村官事迹材料
2014/01/21 职场文书
剪彩仪式主持词
2014/03/19 职场文书
资产运营委托书范本
2014/10/16 职场文书
计划生育汇报材料
2014/12/26 职场文书
实习计划书范文
2015/01/16 职场文书
歌剧魅影观后感
2015/06/05 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript
git中cherry-pick命令的使用教程
2022/06/25 Servers