zoukankan      html  css  js  c++  java
  • 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);

    结果:

     

  • 相关阅读:
    什么是Azkaban?
    设计模式 应用场景
    初识Nginx
    C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)
    C++对象模型笔记之程序设计模型
    深度探索C++对象模型之C++对象模型笔记
    对于数据库设计者而言,在设计表属性类型时应该考虑哪些问题?
    Thread 多线程 同步
    Thread sleep()休眠
    Java 多线程(Thread)学习
  • 原文地址:https://www.cnblogs.com/zjfblog/p/8821064.html
Copyright © 2011-2022 走看看