Сортировка массива с помощью строк DateTime?

Как я могу эффективно сортировать этот массив (последние элементы вначале) по значению end_time в PHP?

 array 0 => array 'value' => int 4 'end_time' => string '2012-01-20T08:00:00+0000' (length=24) 1 => array 'value' => int 0 'end_time' => string '2012-01-21T08:00:00+0000' (length=24) 2 => array 'value' => int 5 'end_time' => string '2012-01-22T08:00:00+0000' (length=24) 3 => array 'value' => int 4 'end_time' => string '2012-01-23T08:00:00+0000' (length=24) 4 => array 'value' => int 7 'end_time' => string '2012-01-24T08:00:00+0000' (length=24) 

Вы посмотрели на usort Docs ? Он позволяет определить функцию обратного вызова для сравнения двух значений. Поэтому я предлагаю следующее:

 function compare_func($a, $b) { // CONVERT $a AND $b to DATE AND TIME using strtotime() function $t1 = strtotime($a["end_time"]); $t2 = strtotime($b["end_time"]); return ($t2 - $t1); } usort(main_array, "compare_func"); 
 usort($data, function($a, $b) { return strtotime($a['end_time']) - strtotime($b['end_time']); }); 
 usort($array, function($a, $b){ return (strtotime ($a ['end_time']) - strtotime ($b ['end_time'])) * -1; }); 

Пытаться:

function sort_datewise($x, $y) { $t1 = strtotime($x['end_time']); $t2 = strtotime($y['end_time']); return $t1 - $t2; } usort($array, 'sort_datewise');
function sort_datewise($x, $y) { $t1 = strtotime($x['end_time']); $t2 = strtotime($y['end_time']); return $t1 - $t2; } usort($array, 'sort_datewise'); 

Эти данные поступают из базы данных? Если это лучший подход, просто попросите базу данных выполнить сортировку для вас.

Вы можете использовать функцию uasort следующим образом:

 $arr=array(); $arr[] = array('valeu' => "4", 'end_time' => '2012-01-20T08:00:00+0000'); $arr[] = array('valeu' => "0", 'end_time' => '2012-01-21T08:00:00+0000'); $arr[] = array('valeu' => "5", 'end_time' => '2012-01-22T08:00:00+0000'); $arr[] = array('valeu' => "4", 'end_time' => '2012-01-23T08:00:00+0000'); $arr[] = array('valeu' => "7", 'end_time' => '2012-01-24T08:00:00+0000'); print_r($arr); function cmp($a, $b) { $ta = strtotime($a['end_time']); $tb = strtotime($b['end_time']); return ($ta - $tb); } uasort($arr, 'cmp'); print_r($arr);