PHP的一个牛逼的数组排序函数array_multisort
函数详情,具体可参考 官方手册 array_multisort
实际问题是这样的,有这么一组数据:
$arr_times = array(
array('2018-04-12 04:25:00', 36144, 14368),
array('2018-04-12 04:25:01', 49320, 14368),
array('2018-04-09 04:25:00', 52658, 14368),
array('2018-04-10 14:25:03', 11535, 14368),
array('2018-04-13 14:25:10', 22635, 14368),
array('2018-04-01 14:25:30', 55558, 14368), );
第一列是时间,要求把这个数据按时间进行排序。明显是个多维数组,普通的sort啊,asort之类应该也能搞定,但是肯定得各种循环遍历,改变数组结构(比如加一列),想想就头大~
此时百度一番,一个函数从天而降,映入我的眼帘,闯进了我的心:是它,是它,就是它,我们的英雄,array_multisort~
这哥们写的这篇文章也很好地介绍了array_multisort 的使用:php基础篇-二维数组排序 array_multisort
具体的用法及该函数的各个参数含义,可直接看手册,不多说。不过有一点需要重点强调一下,对理解该函数很有帮助(这是我本地手册5.6版本中的一句话):
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。
秒懂了吧?也就是说,array_multisort 中各个数组参数,被当做sql的一个表进行处理了,你把第一个数组排序了,那么后面的数组也会被排序,那么关键就在第一个数组身上了:我们要构造这么个“主要数组”,使得这个“主要数组”被排序后,我们原始的数组,也会被排序。
再不懂的话,就再看看手册给的那几个例子。
那么我们自己的代码,该怎么写呢?看下面:
$arr_times = array(
array('2018-04-12 04:25:00', 36144, 14368),
array('2018-04-12 04:25:01', 49320, 14368),
array('2018-04-09 04:25:00', 52658, 14368),
array('2018-04-10 14:25:03', 11535, 14368),
array('2018-04-13 14:25:10', 22635, 14368),
array('2018-04-01 14:25:30', 55558, 14368), ); foreach ($arr_times as $items) {
$arr_keys[] = strtotime($items[0]);
} array_multisort($arr_keys, SORT_ASC, SORT_NUMERIC, $arr_times); var_dump($arr_times);
结果:

PHP的一个牛逼的数组排序函数array_multisort的更多相关文章
- 【项目总结】:怎样做一个牛逼的Team leader?
随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发 ...
- 如何设计一个牛逼的API接口
在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...
- csvkit---python一个牛逼到不行的csv处理库
先吐槽一下:不管是百度还是谷歌,查来查去除了官方文档之外就没有任何可以借鉴的例子,虽然官方文档写的挺好的.但是我一直以为是在python语言的方式运行的,结果是以命令行的方式运行的,搞得我还以为这个库 ...
- 如何成为一个牛逼的C/C++程序员?
这个题目的噱头太大,要真的写起来, 足够写一本书了. 本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路. 每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人. 一.C/ ...
- 《转》如何成为一个牛逼的C/C++程序员?
原地址:http://blog.csdn.net/langeldep/article/details/6333562 这个题目的噱头太大,要真的写起来, 足够写一本书了. 本人是过来人, 结合自身的体 ...
- 教你做一个牛逼的DBA(在大数据下)
一.基本概念 大数据量下,搞mysql,以下概念需要先达成一致 1)单库,不多说了,就是一个库 2)分片(sharding),水平拆分,用于解决扩展性问题,按天拆分表 3)复制(replication ...
- 一个牛逼的 Python 调试工具PySnooper
原文转自:https://mp.weixin.qq.com/s/OtLr-cNethboMgmCcUx2pA PySnooper 使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何 ...
- 一个牛逼的FTP——Wring Ftp
背景:总公司内网有一部分文档需要共享,想要一个能便捷管理的文档系统 需求:分帐号授权,有的帐号只能看,有的帐号只能新增,有的帐号可以增删改查,另外可以便捷的对帐号进行管理 方法: 一.Wing Ftp ...
- 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
随机推荐
- Linux中MySQLl单实例源码编译安装
MySQL5.5以后源码安装要用cmake 1.3 安装相关包(cmake) 1.3.1 cmake软件 cd /home/Public/tools/ tar xf cmake-2.8.8.tar.g ...
- jmeter-server中启动后端口总是不断在变化
1.首先找到这个文件打开: 2.修改两个地方如图: 第一个:server_port=xxxx 第二个:server.rmi.localport=xxxx 3.重启jmeter-server,这是在li ...
- iOS-UIScrollView内容复用【实现两个试图的复用】
前言 这里说的内容复用,是指添加到 ScrollView 里面的试图是同一个模型:比如,我需要在 ScrollView 上添加100个 xkView(其他封装好的VC.UIView),每次滑动 Scr ...
- Django服务器启动时指定端口和IP方法
python manager.py runserver 127.0.0.1:8001
- 从码农升为PM(节约成本)
做为一个码农的潜规则,用户怎么要求怎么写,不论过程只论是否符合要求以及减少bug的存在,虽然bug随时会出现,这就是码农,一直以来都说码农分很多种但个人认为就是一种,原因是码农不懂的换位思考,不懂的在 ...
- linux中进程和计划任务管理
进程和计划任务管理 1. 程序和进程的关系 程序:保存在硬盘.光盘等介质中的可执行代码和数据:静态保存的代码 进程:在 CPU 及内存中运行的程序代码:动态执行的代码:父.子进程:每个进程可以创建一个 ...
- Vim实用技巧系列 - 代码注释
在写代码时候,有时候需要临时注释掉一部分代码,之后还要取消这些注释.真麻烦.那么,用Vim怎么做这件事呢? 第一种方法,块模式. 再次声明,本系列全部以windows下 ...
- Django中url的反向查询
明确几个概念: application namespace: 正在部署的app的名称,一个app的多个实例应该具有相同的application namespace. 可以通过在URLconf模 ...
- springMVC执行流程及原理
spring的MVC执行原理 1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作. 2.DispatcherSer ...
- 【优化】Filddler用于移动端
Fiddler是一个非常强大的Web调试工具,它能捕获所有客户端和服务器的http和https请求,我们可以对请求监视.设置断点,也能修改输入输出数据,这些特性使得Fiddler成为广大web开发者的 ...