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);
结果: