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

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 に答える
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 に答える