How can i sort efficiently this array (recent items first) on end_time
value in PHP?
array
0 =>
array
\'value\' => int 4
Have you looked at the usortDocs function? It lets you define a callback function to compare two values. So I'm suggesting something along these lines:
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']);
});
Try:
function sort_datewise($x, $y) {
$t1 = strtotime($x['end_time']);
$t2 = strtotime($y['end_time']);
return $t1 - $t2;
}
usort($array, 'sort_datewise');
usort($array, function($a, $b){
return (strtotime ($a ['end_time'])
- strtotime ($b ['end_time']))
* -1;
});
Is this data coming from a database? If it is then the best approach is simply have the database do the sorting for you.
You can use uasort function like this:
$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);