2015-09-07 31 views
0

我想基於日期/時間對多維數組進行排序,但是當我執行print_r時它似乎不能正常工作。我最好的猜測是,我提供給strtotime()的時間不是正確的格式,但日期和時間格式都列出了,但單獨在php手冊中,沒有錯誤引發。基於日期/時間的排序數組

我使用的格式是在代碼不清楚所以在這裏它是:YYYY-MM-DD HHMM(24H沒有​​結腸GMT)

下面是代碼:

function dateSort($a, $b){ 
    $d1 = strtotime($a['date'].' '.$a['startTime']); 
    $d2 = strtotime($b['date'].' '.$a['startTime']); 
    return $d1 - $d2; 
}  
usort($events, 'dateSort'); 
print_r($events); 
+0

做'return'前檢查的'$ d1'和'$ d2'值,看看它們是你期待什麼。也許給數組項的一些示例值,以便我們產生問題。 –

+0

嘗試使用'strcmp' –

回答

1

IVAO。 您在第三行代碼段中存在拼寫錯誤。第二行是指$a,但在第三行中,您同時混合了$b$a :)。

另外,我認爲,你根本不需要使用strtotime。考慮片段:

<?php 

function dateSort($a, $b) 
{ 
    $d1 = floatval(str_replace('-', '', $a['date']) . " $a[startTime]"); 
    $d2 = floatval(str_replace('-', '', $b['date']) . " $b[startTime]"); 
    return $d1 - $d2; 
} 

$events = [ 
    ['date' => '2015-05-01', 'startTime' => '2300', 'value' => 'Event 1'], 
    ['date' => '2012-05-01', 'startTime' => '1430', 'value' => 'Event 2'], 
    ['date' => '2011-09-17', 'startTime' => '1021', 'value' => 'Event 3'], 
    ['date' => '2001-01-22', 'startTime' => '0959', 'value' => 'Event 4'], 
    ['date' => '1999-02-05', 'startTime' => '1740', 'value' => 'Event 5'], 
]; 

usort($events, 'dateSort'); 
echo '<pre>' . print_r($events, 1) . '</pre>'; 

And click to codepad.

1

從PHP手冊,你可以嘗試更新你的dateSort()函數

function dateSort($a, $b){ 
    $d1 = strtotime($a['date'].' '.$a['startTime']); 
    $d2 = strtotime($b['date'].' '.$a['startTime']); 
    return ($d1 < $d2) ? -1 : 1; 
}  

建議你給我們一些你的輸出,更容易從那裏拿它。

+0

我試着粘貼上面的代碼,它根本不會改變排序順序。經過進一步調查,我認爲現在是我的問題。您可以在排序後看到數組演示:http://www.aaron-schpitzer.ca/en/events –

+0

它幾乎看起來像時間被完全忽略,id在同一天 –

+0

@ IVAOCA-WM更新了代碼。原始代碼來自PHP手冊,我建議你自己更新你的代碼... –