使用usort无效的排序包含日期的数组

时间:2016-08-01 18:24:22

标签: php arrays sorting date

我有一个d-m-y值的数组,我需要排序,但我的功能不正常,有关如何修复它的任何想法?

每个数组元素包含以下格式:“TB”+ dd + mm + yy +“12”(不好意思不是我的错xD),所以首先我需要删除额外的字符串,然后将日期重新排序为a使用mktime

转换它的mmddyy格式
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;
}

但是有些日子已经过去......我不明白什么可能失败,输出是:

array(151){   [0] =>   string(10)“TB07010012”   [1] =>   string(10)“TB23040012”   [2] =>   string(10)“TB26050012”   [3] =>   string(10)“TB28050012”   [4] =>   string(10)“TB21050012”   [5] =>   string(10)“TB07050012”   [6] =>   string(10)“TB25060012”   [7] =>   string(10)“TB16070012”   [8] =>   string(10)“TB24090012”   [9] =>   string(10)“TB31121312”   [10] =>   string(10)“TB09011412”   [11] =>   string(10)“TB16011412”   [12] =>   string(10)“TB30011412”   [13] =>   string(10)“TB23011412”   [14] =>   string(10)“TB06021412”   .....   .....

并且你可以看到一切似乎都没有,直到元素12(300114 - > 2014年1月30日)应该在元素13之后(230114 - > 2014年1月23日),还有其他类似的错误,但数组是151元素很长所以我认为不是必须发布它...

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

经过一些建议我注意到我的substr索引是错的...我在这里留下了正确的功能以防万一有同样的问题......

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;
}