我有一个日期数组,我必须使用所描述的函数对其进行排序。
这就是我所拥有的:
$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] =&gt; 1013922000 [1] =&gt; 1045371600 [2] =&gt; 1065758400 [3] =&gt; 1097380800 [4] =&gt; 1104555600 )
我的错误在哪里?我将非常感谢您提供解决方案的任何帮助。
答案 0 :(得分: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()
答案 1 :(得分: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
)
*/