2017-04-04 22 views
1

我正在使用usort函數按日期屬性對對象數組進行排序。這些對象是事件,數組可以存儲大量同一天發生的事件。我通過查看數組的大小爲每個新事件的日期附加一個增量秒,以便每個新事件都是唯一的,並且應該是最後一個。但是排序不是這樣的。對具有相同日期的對象排序

public function addEvent($event) 
{ 
    //modify event by adding a second based on the size of events array 
    $event->getDate()->modify("+" . sizeof($this->getEvents()) . " second"); 
    //add new event to events array 
    $this->events[] = $event; 
    //begin sort 
    $events = $this->getEvents(); 
    usort($events, array($this, 'date_compare')); 
    //store new sorted events array 
    $this->setEvents($events); 
} 

function date_compare($a, $b) 
{ 
    return (strtotime($a->getDate()->format('Y-m-d')) < strtotime($b->getDate()->format('Y-m-d')))? -1 : 1; 
} 

這是創建在運行一個新的事件,並返回事件的渲染輸出阿賈克斯形式的一部分。

+0

你的陣列在哪裏? –

+0

你的'date_compare'函數試圖比較沒有秒的日期。曾聽說[DateTime :: diff](http://php.net/manual/en/datetime.diff.php)? – PHPglue

+0

事件數組存儲在存儲在會話中的另一個父對象屬性中。例如,會議室對象具有事件/會議列表。 – raupie

回答

0

我修改了getDate()格式以包含時間,而且似乎已經完成了這個技巧。

return (strtotime($a->getDate()->format('Y-m-d H:i:s')) < strtotime($b->getDate()->format('Y-m-d H:i:s'))) ? -1 : 1;