php中基于日期时间的排序数组

php中基于日期时间的排序数组,php,arrays,sorting,Php,Arrays,Sorting,我想根据[dateTime]对上述数组进行排序,最终输出应该是: Array ( [0] => Array ( [dateTime] => 2011-10-18 0:0:00 [chanl1] => 20.7 [chanl2] => 45.4

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

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] => 
                )
有人知道怎么做吗?谢谢

与自定义排序回调一起使用应该可以:

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] => 
                )
函数cmp($a,$b){
如果($a['dateTime']=$b['dateTime']){
返回0;
}
回报($a['dateTime']<$b['dateTime'])?-1:1;
}
uasort($arr,'cmp');
uasort()

function cmp($a, $b) {
  if ($a['dateTime'] == $b['dateTime']) {
    return 0;
  }

  return ($a['dateTime'] < $b['dateTime']) ? -1 : 1;
}

uasort($arr, 'cmp');
$arr=array(…);
usort($arr,函数($a,$b){
$ad=新的日期时间($a['DateTime']);
$bd=新的日期时间($b['DateTime']);
如果($ad=$bd){
返回0;
}
返回$ad<$bd?-1:1;
});
类重载了比较运算符(
==
)。

使用数组\u多重排序:

$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;
});

对于性能,此方法使用的是:


对于php数组和对象,此示例有助于排序

对于日期时间递减:

$ord = array();
foreach ($array as $key => $value){
    $ord[] = strtotime($value['dateTime']);
}
array_multisort($ord, SORT_ASC, $array);
print_r($array);
对于日期时间升序:

usort($response_data['callback'], function($a, $b) {
   return strcasecmp(strtotime($b->view_date), strtotime($a->view_date));
});

使用spaceship操作符对日期时间对象进行简单排序:

usort($response_data['callback'], function($a, $b) {
   return strtotime($a->view_date) - strtotime($b->view_date);
});
$list=[
新日期时间(“昨天”),
新日期时间(“今天”),
新日期时间(“1周前”),
];
uasort($list,function($a,$b){
返回$a$b;
});
var_dump($列表);

您不应该将字符串值与
@Petah进行比较,因为您假设的是一种特定的日期格式,Crozins的答案更有用。@h.coates是的,您是对的,我假设的格式是示例数据中给出的格式。为什么不呢?@Crozin人们普遍误解usort必须返回
-1,0,1
。与手动状态类似:如果第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数。这意味着任何值
0
@Gordon:是的,我知道这个事实,但是如果我们对不是数字的东西(在这个例子中是DateTime)进行操作,返回
±1
,这是一种常见的做法。三元组不是倒过来的吗?除非我遗漏了一些愚蠢的东西,否则如果第一个值小于第二个值,那么您应该返回一个值注意:切换-1和1,将一般顺序更改为下降。我很高兴我们可以在PHP 7中使用spaceship操作符
。)我喜欢你解的减法部分。这是相当整洁的,而且(至少对我来说)比整个
$a<$b更好阅读-1:($a>$b?1:0)
stuff…对于当前的PHP版本,我宁愿使用spaceship操作符
,但在单一情况下,您不能将正在运行的项目切换到最新的PHP版本(就像我当前的情况一样,客户在更新方面有一些…“问题”)。我尝试对datetime对象数组进行排序,这对我来说非常有效。谢谢我将它稍微修改为
array\u multisort($array,SORT\u ASC,$array)
usort($response_data['callback'], function($a, $b) {
   return strtotime($a->view_date) - strtotime($b->view_date);
});
$list = [
    new DateTime('yesterday'),
    new DateTime('today'),
    new DateTime('1 week ago'),
];

uasort($list, function ($a, $b) {
    return $a <=> $b;
});

var_dump($list);