php - 按日期对多维数组进行排序,但只有它的孩子
问题描述
我正在尝试对数组的子项进行排序,但失败得很惨。问题是只有子项应该通过它们的 ['date']['form_date'] 值而不是数组的第一层来排序/比较:(
Array
(
[0] => Array
(
[0] => Array
(
[date] => Array
(
[from_date] => 2018-07-07
[to_date] => 2018-07-07
)
[post] => Special: Pferdefotografie
)
[1] => Array
(
[date] => Array
(
[from_date] => 2018-07-21
[to_date] => 2018-07-21
)
[post] => Fotoexkursion Südafrika
)
[2] => Array
(
[date] => Array
(
[from_date] => 2018-07-21
[to_date] => 2018-07-21
)
[post] => Fotoexkursion Landschaftsfotografie
)
[3] => Array
(
[date] => Array
(
[from_date] => 2018-07-21
[to_date] => 2018-07-21
)
[post] => Bildaufbau und Komposition
)
[4] => Array
(
[date] => Array
(
[from_date] => 2018-07-22
[to_date] => 2018-07-22
)
[post] => Bildaufbau und Komposition
)
)
[1] => Array
(
[0] => Array
(
[date] => Array
(
[from_date] => 2018-08-11
[to_date] => 2018-08-11
)
[post] => Bildaufbau und Komposition
)
[1] => Array
(
[date] => Array
(
[from_date] => 2018-08-04
[to_date] => 2018-08-04
)
[post] => Makrofotografie 1
)
[2] => Array
(
[date] => Array
(
[from_date] => 2018-08-26
[to_date] => 2018-08-26
)
[post] => Tierfotografie 2
)
[3] => Array
(
[date] => Array
(
[from_date] => 2018-08-19
[to_date] => 2018-08-19
)
[post] => Tierfotografie 1
)
)
[2] => Array
(
[0] => Array
(
[date] => Array
(
[from_date] => 2018-09-15
[to_date] => 2018-09-15
)
[post] => Bildaufbau und Komposition
)
[1] => Array
(
[date] => Array
(
[from_date] => 2018-09-02
[to_date] => 2018-09-02
)
[post] => Makrofotografie 2
)
[2] => Array
(
[date] => Array
(
[from_date] => 2018-09-01
[to_date] => 2018-09-01
)
[post] => Makrofotografie 1
)
)
)
我尝试使用 usort 来比较日期,但我猜它会因为嵌套级别而失败!?
usort($events, function ($a, $b) {
return strtotime($a[0]['date']['from_date']) - strtotime($b[0]['date']['from_date']);
});
任何帮助深表感谢!提前感谢您对此进行调查:)
解决方案
因为您的日期是有Y-m-d
格式的,所以您无需费心将它们转换为时间戳——只需将它们作为字符串进行比较即可。正如 deceze 所说,您只需要迭代第一级并记住通过引用进行修改(这样您就不会修改数组的“副本”)。
代码:(演示:https ://3v4l.org/AXsqR )
foreach ($array as &$set) {
usort($set, function ($a, $b) {
return strcmp($a['date']['from_date'], $b['date']['from_date']);
});
}
推荐阅读
- javascript - 减去两个量并拆分为小数值
- c++ - 我似乎无法在任何地方找到直方图排序的时间复杂度?我知道它是桶排序的类型,但确切的时间复杂度是多少?
- jupyter-notebook - 默认启用在 jupyter lab 中显示行号
- reactjs - React - 为什么我们不需要在 React.memo areEqual 上包含使用 prev 状态的方法?
- c++ - 当从另一个线程调用它时,我可以防止存储的 c++ lambda 中的“this”实例指针的失效/破坏吗?
- firebase - 在实现firebase时出现这个错误该怎么办
- android - 排球数据未显示在回收站视图中
- bash - 选择文件时 bash 脚本中的意外标记“(”附近出现语法错误 [扩展]
- arrays - 如何解决 C 中的内存限制
- c++ - 派生类的属性为空