php二维数组排序方法(array_multisort usort)
例如像下面的数组:
$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值,并计算长度,而后比较长度就可以了。
笔者更喜欢第二种方法,因为少了提取排序内容到一维数组的步骤,而且排序方法更为灵活。
注:
return ($al > $bl) ? -1 : 1;
这里这个返回值是用来判断是否排序成功的
若返回值为负,则表示 A 在排序后的序列中出现在 B 之前。
若返回值为 0,则表示 A 和 B 具有相同的排序顺序。
若返回值为正,则表示 A 在排序后的序列中出现在 B 之后。
php二维数组排序方法(array_multisort usort)的更多相关文章
- php二维数组排序方法(array_multisort,usort)
一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组: $users = ...
- ***PHP 数组排序 +php二维数组排序方法(PHP比较器)
PHP - 一维数组的排序函数 在本节中,我们将学习如下 PHP 数组排序函数: sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组 ...
- php二维数组排序方法(转自http://www.3lian.com/edu/2013/12-26/118882.html)
一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组: 代码如下: ...
- PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)
一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...
- php基础篇-二维数组排序 array_multisort
原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...
- php实现二维数组排序array_multisort($ages, SORT_DESC, $home)函数
1.sql查询排序参数是order by,那么php进行排序呢 可以参考array_multisrot函数 //php进行二维数组排序 -xzz1009 foreach($home as $home) ...
- PHP array_multisort实现二维数组排序
PHP array_multisort实现二维数组排序 参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能.第一个数组是要排序的主要数组.数组中的行(值 ...
- PHP二维数组排序(感谢滔哥)
滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...
- PHP 二维数组排序保持键名不变
对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例: <?php $data = ar ...
随机推荐
- 【SQL】- 基础知识梳理(五) - 触发器
触发器的概念 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程 触发器的语法 create trigger tgr_name on table_name with encrypion –加 ...
- C#时常需要调用C++DLL
在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传递和返回字符串是,现总结一下,分享给大家: VC++中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, st ...
- JavaScript 错误监控Fundebug
https://www.fundebug.com/ 等待接收错误 请先将Fundebug插件集成到您的应用中 测试插件 为验证集成是否成功,请在浏览器的控制台执行以下命令: fundebug.noti ...
- Java 根据Date计算年龄
- LNMP(linux+nginx+mysql+php)服务器环境配置【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/05/17/2507102.h ...
- python3使用newspaper快速抓取任何新闻文章正文
newspaper用于爬取各式各样的新闻网站 1,安装newspaper pip install newspaper3k 2,直接上代码 from newspaper import Article u ...
- loj#6041. 「雅礼集训 2017 Day7」事情的相似度(后缀自动机+启发式合并)
题面 传送门 题解 为什么成天有人想搞些大新闻 这里写的是\(yyb\)巨巨说的启发式合并的做法(虽然\(LCT\)的做法不知道比它快到哪里去了--) 建出\(SAM\),那么两个前缀的最长公共后缀就 ...
- go 递归实现快排
package main import ( "fmt" ) func main() { arr := []int{1,2,5,8,7,4,3,6,9,0,12,13,45,78,8 ...
- PyCharm4.5.4注册码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 name : newasp == ...
- 对IOC的理解
我觉得 IOC 主要分两块去理解, 第一块 IOC是干什么的, 为什么需要IOC ?; 第二块,IOC 这么好,该怎么用? 一: 为什么需要IOC? 回答这个问题就要从ioc的含义入手: IOC ...