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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
PHP中把对象数组转换成普通数组的方法
Jul 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
php 检查电子邮件函数(自写)
2014/01/16 PHP
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
代码实例讲解python3的编码问题
2019/07/08 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
python数据化运营的重要意义
2019/11/25 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
自我鉴定范文
2013/11/10 职场文书
办公室副主任岗位职责
2013/11/25 职场文书
区级文明单位申报材料
2014/05/15 职场文书
保护环境倡议书100字
2014/05/19 职场文书
计算机求职信
2014/07/02 职场文书
教师个人成长总结
2015/02/11 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
php png失真的原因及解决办法
2021/10/24 PHP