需要帮助排序多个数组

时间:2011-01-31 01:11:05

标签: php sorting

我在这里看到很多例子,但它对我不起作用。

我有一个从我的DB中检索到的已排序事件列表:

16.08.2010 12:00:00 - 21.08.2010 20:00:00
16.08.2010 20:00:00 - 21.08.2010 23:00:00
18.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');

如何按日期对此数组进行排序?

2 个答案:

答案 0 :(得分:2)

您是否尝试过natural sorting算法?

答案 1 :(得分:2)

正如Nazariy所提到的,你最好在源头预先排序事件(假设它们来自数据库)。

如果必须在代码中对数组进行排序,则应该能够使用usort。我假设您要按startTime

排序
usort($events, function($a, $b) {
    return strtotime($a->startTime) - strtotime($b->startTime);
});