2011-01-31 4 views
0

Я вижу здесь много примеров, но это не работает для меня.Нужна помощь в сортировке нескольких массивов

У меня есть список отсортированных событий, извлекаемых из моей БД:

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');.

Как я могу сортировать этот массив по дате?

+3

Было бы более эффективно это делать с помощью параметра MySQL ORDER BY. – Nazariy

+0

Почему вы не можете использовать uasort (или usort, что было бы более подходящим)? – Phil

+1

FYI, вы не копируете '$ e', назначая его' $ newEnv', вы просто создаете другую ссылку. Чтобы скопировать объект, используйте [клон] (http://php.net/manual/en/language.oop5.cloning.php) – Phil

ответ

2

Как упоминал Назарий, вам было бы лучше предварительно сортировать события у источника (если они исходят из БД).

Если вы должны отсортировать массив в коде, вы должны использовать usort. Я предполагаю, что вы хотите сортировать по startTime

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

Я добавил дополнительную информацию в свой Q. Исходный список событий извлекается в порядке от БД. Спасибо за подсказку на 'usort.' Я проверю это. – Steven

Смежные вопросы