phparrayssortingdatetimemultidimensional-array

Sort a 2d array by a datetime column formatted as Y-m-d\TH:i:s.\+000


How can I efficiently sort 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)

Solution

  • 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");