2016-08-01 40 views
0

我有我需要排序的d-m-y值的數組,但是我的函數沒有正常工作,關於如何修復它的任何想法?排序數組包含使用usort不工作的日期

每個數組元素都包含在下面的格式中:「TB」+ dd + mm + yy +「12」(抱歉,不是我的錯xD),所以首先我需要刪除額外的字符串,然後重新排序日期一個MMDDYY格式以將其轉換使用mktime

usort($periodos, 'date_compare'); 

function date_compare($a, $b) { 
    // Reomves "TB" at the beginning and "12" at the end 
    $t1 = substr($a, 2, -2); 
    $t2 = substr($b, 2, -2); 

    $t1 = mktime(0, 0, 0, substr($t1, 4, 2), substr($t1, 2, 2), substr($t1, 6, 2)); 
    $t2 = mktime(0, 0, 0, substr($t2, 4, 2), substr($t2, 2, 2), substr($t2, 6, 2)); 

    return $t1 - $t2; 
} 

但一些日子是關閉...,我不理解什麼可以失敗,則輸出爲:

陣列(151){ [0] = > string(10)「TB07010012」 [1] => string(10)「TB23040012」 [2] => 串(10) 「TB26050012」 [3] => 串(10) 「TB28050012」 [4] => 串(10) 「TB21050012」 [5] => 串(10) 「TB07050012」 [6] => 串(10) 「TB25060012」 [7] => 串(10) 「TB16070012」 [8] => 串(10) 「TB24090012」 [ 9] => 串(10) 「TB31121312」 [10] => 串(10) 「TB09011412」 [11] => 串(10) 「TB16011412」 [12] => 串(10 )「TB300 11412" [13] => 串(10) 「TB23011412」 [14] => 串(10) 「TB06021412」 ..... .....

和,你可以看到一切似乎沒有問題,直到元素13(230114 - > 2014年1月23日)之後的元素12(300114 - > jan 30 2014),還有其他類似的錯誤,但數組長度爲151元,所以我不認爲是必要的發佈這一切..

感謝您的幫助

+0

嘗試的strcmp($ T1,T2 $)代替$ T1 - $ T2 – mseifert

+0

都能跟得上......它沒有工作,錯誤在那裏停留 – Chico3001

+0

你可以嘗試使用時間戳重新編寫數組,並在輸出上重新創建日期。 – Nitin

回答

0

一些建議,我發現我的SUBSTR索引錯誤後...即時離開CORRE這裏CT功能,以防有人有同樣的問題...

function date_compare($a, $b) { 
    // Reomves "TB" at the beginning and "12" at the end 
    $t1 = substr($a, 2, -2); 
    $t2 = substr($b, 2, -2); 

    $t1 = mktime(0, 0, 0, substr($t1, 2, 2), substr($t1, 0, 2), substr($t1, 4, 2)); 
    $t2 = mktime(0, 0, 0, substr($t2, 2, 2), substr($t2, 0, 2), substr($t2, 4, 2)); 

    return $t1 - $t2; 
} 
+0

如果你很高興這是你的問題的正確答案,你應該接受它。 – rjdown

+0

我會做...但我需要等待2天,謝謝! – Chico3001