如何按PHP中的时间值对多维数组进行排序?

时间:2014-04-06 21:41:18

标签: php arrays sorting

我正在做一个学校项目,我有一个包含start_timeend_time课程的多维数组。

我已经按天对数组进行了排序,但我也希望按时间对数组进行排序。这样最低的start_time是数组的第一个元素。

这就是我的阵列目前的情况:

Array ( 
       [0] => Array ( 
                     [courseID] => comp345
                     [lectureID] => ss
                     [day] => monday
                     [stime] => 18:20 
                     [etime] => 20:30 
                     [term] => winter 
                     [year] => 2014 
              )
       [1] => Array ( 
                     [courseID] => comp275 
                     [lectureID] => gg 
                     [day] => monday 
                     [stime] => 12:15 
                     [etime] => 15:16 
                     [term] => winter 
                     [year] => 2014
              )
)

我想知道是否有任何预先定义的函数可以执行此操作,或者我是否需要为此任务创建新的特定函数。

我可以像这样访问start_time的值:

foreach ($array as $element)
{
  $start_time = (substr($element['stime'], 0, 5));
}

这将以此格式返回时间:08:20

在比较时,它的工作方式与普通数字相同:

08:20< 10:15 =是真的

08:20> 10:15 =假

2 个答案:

答案 0 :(得分:3)

PHP> = 5.5.0

array_multisort(array_map('strtotime', array_column($array, 'stime')), SORT_ASC, $array);

PHP< 5.5.0

foreach ($array as $k => $v) {
  $stime[$k] = strtotime($v['stime']);
}
array_multisort($stime, SORT_ASC, $array);

答案 1 :(得分:0)

将带有mktime的unix时间戳添加到您的数组,并按该时间戳排序。 unix时间戳是自1970年以来的秒数,所以它是一个整数,因此很容易排序。

看看这个reference question about sorting in PHP

你有

Array ( 
  [0] => Array ( [courseID] => comp345 [lectureID] => ss 
                 [day] => monday 
                 [stime] => 18:20 
                 [etime] => 20:30 
                 [term] => winter 
                 [year] => 2014 ) 
  [1] => Array ( [courseID] => comp275 [lectureID] => gg 
                 [day] => monday [stime] => 12:15 
                 [etime] => 15:16 [term] => winter 
                 [year] => 2014 ) )

这样的事情应该这样做:

Go through array, add 'unixtimestamp' = mktime($el['hour'], $el['minute'], 0, 0, 0, $el['year'])

function sortByOrder($a, $b) {
    return $a['unixtimestamp'] - $b['unixtimestamp'];
}

usort($myArray, 'sortByOrder');