我正在做一个学校项目,我有一个包含start_time
和end_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 =假
答案 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');