php - 如何在 PHP 中按键对二维数组进行排序
问题描述
我有一个这种形式的二维数组:
$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 格式),它的工作方式完全符合我的预期。再次感谢所有做出贡献的人。
解决方案
正如您所说,您的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 或 dmy 格式的日期通过查看 各个组件之间的分隔符来消除歧义:如果分隔符是 斜杠 (/),则假定为美式 m/d/y;而如果 分隔符是破折号 (-) 或点 (.),则 假定为欧洲 dmy 格式。但是,如果年份以两位数格式给出并且 分隔符是破折号(-,则日期字符串被解析为 ymd.
源链接。
演示。
推荐阅读
- mysql - mysql查询可以在哪里进行限制吗?
- git - `git fetch` 和 `git push` 用于本地快速转发的区别
- matlab - 特定空间模式中的细胞集落存活映射
- discord.js - 如何通过名称获取类别 ID?
- python - tkinter python - 菜单按钮不适用于循环
- python - 单击按钮时显示图像 Python GUI
- python - Python numpy:索引20超出轴0的范围,大小为20?
- swagger - 在 WebDeploy 之后无法访问 Swagger UI
- session - 在 NextJS getServerSideProps 中使用 Bearer 令牌装饰 api 请求
- rust - 在 Rust 中修改单个字节