php - 将日期列表排序为唯一的年/月/日数组
问题描述
我已经为此苦苦挣扎了一段时间,所以我决定寻求帮助。
我需要像这样转换日期列表:
2019-09-17,
2019-09-16,
2018-08-15,
2017-08-14
并将它们输出为唯一年/月/日的嵌套列表:
- 2019
- 09
- 17
- 16
- 09
- 2018
- 08
- 15
- 08
- 2017
- 08
- 14
- 08
$dates = wp_list_pluck( $queriedFiles->posts, 'post_date' );
$cleanDates = array();
foreach ($dates as $date) {
$createDate = new DateTime($date);
$date = $createDate->format('Y-m-d');
array_push($cleanDates, $date);
}
$uniqueDates = array_unique($cleanDates);
$years = array();
$properDates = array();
foreach ($uniqueDates as $date) {
$createDate = new DateTime($date);
$strippedYear = $createDate->format('Y');
$strippedMonth = $createDate->format('m');
$strippedDay = $createDate->format('d');
$thisDate = array('year' => $strippedYear, 'month'=>$strippedMonth, 'day'=>$strippedDay);
array_push($years, $strippedYear);
array_push($properDates, $thisDate);
}
我希望最终得到一个多维数组,我可以循环获取年/月/日
你们能提供的任何帮助都会很棒。谢谢!
解决方案
您可以使用explode
. 像这样的东西:
$dates = ['2019-09-17', '2019-09-16', '2018-08-15', '2017-08-14'];
$result = [];
foreach($dates as $date) {
$dateParts = explode('-', $date);
$result[$dateParts[0]][$dateParts[1]][] = $dateParts[2];
}
会产生
array(3) {
[2019]=>
array(1) {
["09"]=>
array(2) {
[0]=>
string(2) "17"
[1]=>
string(2) "16"
}
}
[2018]=>
array(1) {
["08"]=>
array(1) {
[0]=>
string(2) "15"
}
}
[2017]=>
array(1) {
["08"]=>
array(1) {
[0]=>
string(2) "14"
}
}
}
如果你想排序,你可以像这样简单地排序:
foreach($result as &$e){
ksort($e);
foreach($e as &$t){
asort($t);
}
}
ksort($result);
ksort
(ascending) 或krsort
(descending) 将按键排序,sort
(ascending) 或rsort
(descending) 将按值排序;
推荐阅读
- laravel - Livewire - 更改选定用户时的 2 级下拉更改值
- r - 用情节 Shiny R 制作累积图形
- node.js - Express/Nodejs 使用 post 方法从 Angular 接收到未定义的 json
- matlab - 我正在尝试使用代码在 MATLAB 中创建图形,但它不起作用
- firebase - 从客户端获取 Id 令牌到服务器
- android - Cordova Android 构建错误:“:app:processReleaseGoogleServices'(类型'GoogleServicesTask')”
- python - 我能做些什么来防止我的代码输入字符串?
- flutter - 我希望在解析 html 之前运行脚本。我使用飞镖(颤振)
- c++ - 使用概念定义任意嵌套的 initializer_list 构造函数
- python - 如何使用 TensorFlow Lite 绘制损失和准确度图