我有一个二维数组,形式如下:
$my_array = array(
array("date" => "10/04/2019"),
array("date" => "10/05/2017")
...
)
我要做的就是对它进行排序,以使日期为10/05/2017
的数组排在其他数组之前。
我尝试了以下操作:
usort(
$my_array,
function($a, $b) {
return strcmp($a['date'], $b['date']);
}
);
它似乎不起作用。
我仍然将较晚的日期放在较早的日期之前。
它比我所展示的要复杂一些,但是我认为这是核心原则。如果我给出的示例有问题,那么它本身可能会解释问题。
编辑-根据正确答案和其他注释进行了修复。我在比较字符串而不是日期。包装strtotime使其可以在日期之间进行比较。我也将日期的格式更改为Y / m / d(MySQL格式),它的工作方式完全符合我的期望。再次感谢所有贡献者。
答案 0 :(得分:5)
正如您所说,您使用d/m/Y
格式(根据PHP文档无效),您需要将其转换为d-m-Y
。
您可以比较以下日期,
usort($my_array, function ($a, $b) {
$aDate = strtotime(str_replace("/", "-", $a['date']));
$bDate = strtotime(str_replace("/", "-", $b['date']));
return $aDate - $bDate;
});
注意:通过查找,可以消除m / d / y或d-m-y格式的日期的歧义 位于各个组件之间的分隔符:如果分隔符是一个 斜线(/),则假定为美国m / d / y;而如果 分隔符是破折号(-)或点(。),然后是欧洲d-m-y格式 假定为。但是,如果年份以两位数格式给出,并且 分隔符是破折号(-,日期字符串被解析为y-m-d。
来源link。
Demo。
答案 1 :(得分:3)
最好比较时间戳而不是日期字符串
$my_array = array(
array("date" => "10/04/2019"),
array("date" => "10/05/2017")
);
usort($my_array, function ($a, $b) {
return strtotime($a['date']) <=> strtotime($b['date']);
});
print_r($my_array);
答案 2 :(得分:1)
如果您将日期格式更改为YYYY / MM / DD,则您的功能应开始正常工作。
答案 3 :(得分:0)
像这样的d-m-Y更改日期格式。 转换您的日期后,您的功能将可以正常使用。
请参见下面的工作代码
$my_array = array(
array("date" => "11-04-2019"),
array("date" => "12-05-2017"),
array("date" => "13-05-2018"),
array("date" => "14-05-2016"));
usort(
$my_array,
function ($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
print_r($my_array);