【发布时间】:2011-01-31 10:00:13
【问题描述】:
我在这里看到了很多例子,但它对我不起作用。
我有一个从我的数据库中检索到的排序事件列表:
16.08.2010 12:00:00 - 21.08.2010 20:00:0016.08.2010 20:00:00 - 21.08.2010 23:00:0018.08.2010 17:00:00 - 18.08.2010 19:00:00
如您所见,第一个事件是从 16.08 到 21.08。
我需要“切碎”,以便每天获得一个条目。
这是我的功能:
function fullList( $data ) {
$ev = $data['events'];
$events = array();
// Loop through each event. If event spans over several days, add each day in to new event list
foreach($ev as $e) :
$endDate = strtotime(date('Y-m-d 23:59:59', strtotime($e->endTime)));
$current = strtotime($e->startTime);
// Copy event so data is not overwritten
$newEv = $e;
while ($current <= $endDate) {
//Set start date of event to new date
$newEv->startTime = date('d.m.Y H:i:s', $current);
// Add events to new event list
array_push($events,$newEv);
//Go to next date
$current = strtotime('+1 day', $current);
}
endforeach;
// Need to sort $events here
}
现在$events 包含所有事件,但未按日期排序。我试过uasort,但我不能用uasort($array, 'cmp');。
如何按日期对这个数组进行排序?
【问题讨论】:
-
通过 MySQL ORDER BY 参数来做会更有效率。
-
为什么不能使用 uasort(或者更合适的 usort)?
-
仅供参考,您并没有通过将
$e分配给$newEnv来复制它,您只是创建了另一个引用。要复制对象,请使用clone -
@Nazariy - 从 s.time 排序的 DB 中检索初始列表。谢谢@Phil Brown - 我忘了。
-
您可以在 ORDER 语句中使用几列并在必要时将它们分组,例如:ORDER BY event_date DESC, event_time ASC