2012-07-04 2 views
3

Я пытаюсь сортировать массив в PHP по дате и времени, который находится в формате ISO 8601. Я все еще пытаюсь понять PHP и попробовал много решений по переполнению стека, и я просто не могу прикрыть правильную функцию. Надеюсь, это простой ответ, и он будет полезен другим.Сортировка массива PHP по дате ISO

FYI, этот массив был создан API Citrix для GoToMeeting. Я хотел бы отсортировать массив на основе startTime в скором времени сначала в списке.

Вот что массив выглядит как с помощью var_export с двумя результатами, представленными:

array (
0 => stdClass::__set_state(
    array(
    'createTime' => '2012-07-03T19:36:58.+0000', 
    'status' => 'INACTIVE', 
    'subject' => 'Client 1', 
    'startTime' => '2012-07-10T14:00:00.+0000', 
    'conferenceCallInfo' => 'United States: xxxxx Access Code: xxxxx', 
    'passwordRequired' => 'false', 
    'meetingType' => 'Scheduled', 
    'maxParticipants' => 26, 
    'endTime' => '2012-07-10T15:00:00.+0000', 
    'uniqueMeetingId' => 12345678, 
    'meetingid' => 123456789, 
) 
), 
1 => stdClass::__set_state(
    array(
    'createTime' => '2012-07-02T21:57:48.+0000', 
    'status' => 'INACTIVE', 
    'subject' => 'Client 2', 
    'startTime' => '2012-07-06T19:00:00.+0000', 
    'conferenceCallInfo' => 'United States: xxxxx Access Code: xxxxx', 
    'passwordRequired' => 'false', 
    'meetingType' => 'Scheduled', 
    'maxParticipants' => 26, 
    'endTime' => '2012-07-06T20:00:00.+0000', 
    'uniqueMeetingId' => 12345678, 
    'meetingid' => 123456789, 
) 
), 
) 

Моя цель состоит в том, чтобы затем вывести массив в HTML Div, используя цикл Еогеасп, этот код является полной и работает хорошо, но мой сортировка не работает :-)

Заранее благодарю за помощь!

Steve

+1

Приятная вещь о iso8601 заключается в том, что вы можете просто сделать простой сортировку строк и получить их в правильном порядке. Посмотрите на [usort()] (http://php.net/usort) –

ответ

3

Вы можете реализовать любую сортировку техники вы можете думать, если вы оберните его в обратном вызове и использовать usort()docs here

внутри обратного вызова, вы можете использовать StrToTime или подобный, и сделать простой ИНТ сравнения ,

$myDateSort = function($obj1, $obj2) { 
    $date1 = strtotime($obj1->startTime); 
    $date2 = strtotime($obj2->startTime); 
    return $date1 - $date2; // if date1 is earlier, this will be negative 
} 
usort($myArray, $myDateSort); 
+0

Спасибо за фрагмент кода, к сожалению, это не влияет на мои результаты. Попытка понять код, является ли usort генерировать $ obj1, $ obj2 входы для функции? –

+0

Kinda ... Когда вы вызываете usort и передаете ему массив, он вызывает вашу функцию несколько раз, каждый раз проходя через 2 объекта в вашем массиве. Таким образом, $ obj1 и $ obj2 - это каждый экземпляр любого массива, хранящегося как его значения (я думаю, ваш код указывает, что это экземпляры stdClass). Внутри функции вы просто оцениваете, является ли первая «меньше» второй, и если да, возвратите отрицательный int, иначе положительный (или нулевой для того же). PHP заботится о фактической сортировке массива на основе вызова вашей функции для большинства пар значений массива. –

+0

После второго взгляда я смог получить свой массив для сортировки и вывода в правильном порядке. Примечание для других, если вы используете код, указанный в ответе, и результаты не сортируются, попробуйте использовать usort ($ this -> $ myArray, $ myDateSort); –