如果在零索引键处给出,则排序数组日期明智

时间:2015-06-04 12:06:14

标签: php arrays sorting

实际上我有一个阵列,我需要根据日期对它进行排序,但不幸的是,这对我来说很难。你能救我一下......

我有一个类似下面的数组

         $data = array ( 
            array('July 2015', 2 , 5, 0, ''),
            array('September 2015', 2 , 5, 0, ''),
            array('August 2015', 2 , 5, 0, ''),
            array('March 2017', 2 , 5, 0, ''),
            array('December 2015', 2 , 5, 0, ''),
            array('March 2016', 2 , 5, 0, ''),
         );

现在我想按照从最小日期到较大日期的日期顺序排序这个数组,就像那样。

         $data = array ( 
            array('July 2015', 2 , 5, 0, ''),
            array('August 2015', 2 , 5, 0, ''),
            array('September 2015', 2 , 5, 0, ''),
            array('December 2015', 2 , 5, 0, ''),
            array('March 2016', 2 , 5, 0, ''),
            array('March 2017', 2 , 5, 0, ''),
         );

任何人都可以帮助我。

任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

使用usort函数并使用strtotime将字符串日期转换为时间戳:

usort($data, function ($a, $b) {
    $aTime = strtotime($a[0]);
    $bTime = strtotime($b[0]);

    if ($aTime == $bTime)
        return 0;

    return $aTime > $bTime ? 1 : -1;
});

答案 1 :(得分:1)

$data = array(
    array('July 2015', 2, 5, 0, ''),
    array('September 2015', 2, 5, 0, ''),
    array('August 2015', 2, 5, 0, ''),
    array('March 2017', 2, 5, 0, ''),
    array('December 2015', 2, 5, 0, ''),
    array('March 2016', 2, 5, 0, ''),
);

uasort($data, function($a,$b){ 
    if(strtotime($a[0]) == strtotime($b[0])) 
    { 
        return 0;
    } 
    return strtotime($a[0]) < strtotime($b[0]) ? -1 : 1;
 });

print_r($data);

或者 DECEZE 所说的最简单的方式

uasort($data, function($a,$b){ 
   return strtotime($a[0]) - strtotime($b[0]);
});

DEMO

DEMO SUGGESTED BY DECEZE