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 传值赋值与引用赋值的区别
Dec 29 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
php好代码风格的阶段性总结
Jun 25 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
php中对象引用和复制实例分析
Aug 14 PHP
laravel使用数据库测试注意事项
Apr 10 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
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
Python读写Excel文件的实例
2013/11/01 Python
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
python使用matplotlib画饼状图
2018/09/25 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
python sorted方法和列表使用解析
2019/11/18 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
如何在sublime编辑器中安装python
2020/05/20 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Python读写锁实现实现代码解析
2020/11/28 Python
Flask处理Web表单的实现方法
2021/01/31 Python
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
大学四年个人自我小结
2014/03/05 职场文书
《花木兰》教学反思
2014/04/09 职场文书
关于旅游的活动方案
2014/08/15 职场文书
投诉书格式范本
2015/07/02 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers