0

我有一个日期数组,我必须使用描述的函数对其进行排序。

这是我所拥有的:

$dates = array ('10-10-2003', '2-17-2002', '2-16-2003','1-01-2005', '10-10-2004' );
function date_to_timestamp($d){
$newarr = array();
foreach($d as $f) {
    $arr=explode("-",$f);
    array_push($newarr, mktime(0,0,0,$arr[0],$arr[1],$arr[2]));
}
return $newarr;
}

function cmp2($a, $b)
{
if ($a == $b) {
    return 0;
}
return ($a < $b) ? -1 : 1;
}

$third = date_to_timestamp($dates);


usort($third, "cmp2");
print_r($third);

?>

之后,这是我得到的疯狂输出:

数组([0] => 1013922000 [1] => 1045371600 [2] => 1065758400 [3] => 1097380800 [4] => 1104555600)

我的错误在哪里?对于解决方案的任何帮助,我将不胜感激。

4

2 回答 2

0

这是您的替代解决方案。

<?php
$dates = array(
    '10-10-2003',
    '2-17-2002',
    '2-16-2003',
    '1-01-2005',
    '10-10-2004',
);

function toTime($date) {
    list($month, $day, $year) = explode('-', $date);
    return mktime(0, 0, 0, $month, $day, $year);
}

function sortByTime($a, $b) {
    $a = toTime($a);
    $b = toTime($b);
    if($a == $b) {
        return 0;
    }
    return $a < $b ? -1 : 1 ;
}

usort($dates, 'sortByTime');

print_r($dates);

/*
    Array
    (
        [0] => 2-17-2002
        [1] => 2-16-2003
        [2] => 10-10-2003
        [3] => 10-10-2004
        [4] => 1-01-2005
    )
*/
于 2012-11-18T08:23:05.297 回答
0

在您的 date_tim_timestamp 函数中,您实际上是在丢弃您的日期来代替整数值。

试试这个:

function date_to_timestamp($d){
    $newarr = array();
    foreach($d as $f) {
        $arr=explode("-",$f);
        //array_push($newarr, mktime(0,0,0,$arr[0],$arr[1],$arr[2]));
        $int_version = mktime(0,0,0,$arr[0],$arr[1],$arr[2]);
        $newarr[$int_version] = $f;
    }
    return $newarr;
}

使用这种方法,您不需要使用 usort(),只需使用 ksort()

于 2012-11-18T07:59:44.597 回答