Sorting an array with DateTime strings?

2020-04-11 14:21发布

How can i sort efficiently this array (recent items first) on end_time value in 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)

6条回答
女痞
2楼-- · 2020-04-11 14:37

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);
查看更多
做个烂人
3楼-- · 2020-04-11 14:38

Try:


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

查看更多
ら.Afraid
4楼-- · 2020-04-11 14:41
usort($array, function($a, $b){ 
    return (strtotime ($a ['end_time']) 
          - strtotime ($b ['end_time'])) 
          * -1; 
});
查看更多
地球回转人心会变
5楼-- · 2020-04-11 14:42

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");
查看更多
Luminary・发光体
6楼-- · 2020-04-11 14:50

Is this data coming from a database? If it is then the best approach is simply have the database do the sorting for you.

查看更多
家丑人穷心不美
7楼-- · 2020-04-11 14:53
usort($data, function($a, $b) {
    return strtotime($a['end_time']) - strtotime($b['end_time']);
});
查看更多
登录 后发表回答