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 相关文章推荐
Apache中php.ini的设置方法
Feb 28 PHP
一个PHP二维数组排序的函数分享
Jan 17 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
详解PHP中的状态模式编程
Aug 11 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
ThinkPHP实现登录退出功能
Jun 29 PHP
PHP封装的完整分页类示例
Aug 21 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
PHP递归的三种常用方式
2019/02/28 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
linux下python使用sendmail发送邮件
2018/05/22 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Python发展简史 Python来历
2019/05/14 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
办公室岗位职责
2014/02/12 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2015年见习期工作总结
2014/12/12 职场文书
语文复习计划
2015/01/19 职场文书
护士个人年度总结范文
2015/02/13 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
正则表达式基础与常用验证表达式
2022/06/16 Javascript