在 php 中基于日期时间对数组进行排序

2022-08-30 13:29:54
Array
        (
            [0] => Array
                (
                    [dateTime] => 2011-10-18 0:0:00
                    [chanl1] => 20.7
                    [chanl2] => 45.4
                    [chanl3] => 
                )

            [1] => Array
                (
                    [dateTime] => 2011-10-18 0:15:00
                    [chanl1] => 20.7
                    [chanl2] => 45.4
                    [chanl3] => 
                )


            [2] => Array
                (
                    [dateTime] => 2011-10-18 00:14:00
                    [chanl1] => 20.7
                    [chanl2] => 33.8
                    [chanl3] => 
                )

            [3] => Array
                (
                    [dateTime] => 2011-10-18 00:29:00
                    [chanl1] => 20.6
                    [chanl2] => 33.9
                    [chanl3] => 
                )

我想根据[dateTime]对上面的数组进行排序,最终的输出应该是:

Array
        (
            [0] => Array
                (
                    [dateTime] => 2011-10-18 0:0:00
                    [chanl1] => 20.7
                    [chanl2] => 45.4
                    [chanl3] => 
                )

            [1] => Array
                (
                    [dateTime] => 2011-10-18 00:14:00
                    [chanl1] => 20.7
                    [chanl2] => 33.8
                    [chanl3] => 
                )

            [2] => Array
                (
                    [dateTime] => 2011-10-18 0:15:00
                    [chanl1] => 20.7
                    [chanl2] => 45.4
                    [chanl3] => 
                )            

            [3] => Array
                (
                    [dateTime] => 2011-10-18 00:29:00
                    [chanl1] => 20.6
                    [chanl2] => 33.9
                    [chanl3] => 
                )

有没有人知道如何做?谢谢!


答案 1

usort() 函数与自定义比较器一起使用:

$arr = array(...);

usort($arr, function($a, $b) {
  $ad = new DateTime($a['dateTime']);
  $bd = new DateTime($b['dateTime']);

  if ($ad == $bd) {
    return 0;
  }

  return $ad < $bd ? -1 : 1;
});

DateTime 类具有重载的比较运算符 (, , )。<>==


答案 2

为了提高性能,使用array_multisort的此方法非常有效

$ord = array();
foreach ($array as $key => $value){
    $ord[] = strtotime($value['dateTime']);
}
array_multisort($ord, SORT_ASC, $array);
print_r($array);