2012-07-04 186 views
3

我想按日期和時間按ISO 8601格式對PHP中的數組進行排序。我仍然試圖掌握PHP,並嘗試了很多堆棧溢出的解決方案,但我無法確定正確的功能。希望這是一個簡單的答案,對別人會有幫助。按ISO排序PHP數組日期

僅供參考,此陣列由Citrix API for 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, 
) 
), 
) 

我的目標是,將其輸出數組使用foreach循環HTML div的,這個代碼已經完成,效果很好,但我排序關閉:-)

預先感謝您的幫助!

史蒂夫

+1

關於ISO8601的好處是,你可以一般只是做一個簡單的字符串排序,並讓他們在正確的順序。看看[usort()](http://php.net/usort) –

回答

3

可以實現任何排序技術,你能想到的,如果你把它包裝在一個回調,並使用usort()docs here

回調裏面,你可以使用的strtotime或相似,並做簡單的INT比較。

$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

有點......當你調用usort並將它傳遞給一個數組時,它會多次調用你的函數,每次傳入數組中的2個對象。所以$ obj1和$ obj2是你數組保持的每個實例,因爲它是值(我認爲你的代碼表明它們是stdClass實例)。在函數內部,您只需評估第一個「小於」第二個,如果是,則返回負的int,否則返回正值(或相同的零)。 PHP負責基於爲大多數數組值對調用函數來實際對數組進行排序。 –

+0

第二次看後,我可以讓我的數組按照正確的順序排序和輸出。如果您使用答案中提供的代碼並且結果未進行排序,請注意其他人,嘗試使用usort($ this - > $ myArray,$ myDateSort); –