У меня есть массив дат, и я должен сортировать его, используя описанные функции.
Вот что я имею:
$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)
Где моя ошибка? Я буду признателен за любую помощь в решении.
В вашей функции 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 ()
Вот альтернативное решение для вас.
<?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 ) */