2016-08-01 69 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