Php 将日期列表排序为唯一的年/月/日数组

Php 将日期列表排序为唯一的年/月/日数组,php,wordpress,sorting,date,datetime,Php,Wordpress,Sorting,Date,Datetime,我已经为此挣扎了一段时间,所以我决定寻求帮助 我需要转换如下日期列表: 2019-09-17, 2019-09-16, 2018-08-15, 2017-08-14 $dates = ['2019-09-17', '2019-09-16', '2018-08-15', '2017-08-14']; $result = []; foreach($dates as $date) { $dateParts = explode('-', $date); $result[$dateP

我已经为此挣扎了一段时间,所以我决定寻求帮助

我需要转换如下日期列表:

2019-09-17,
2019-09-16,
2018-08-15,
2017-08-14
$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];
}
foreach($result as &$e){
    ksort($e);
    foreach($e as &$t){
        asort($t);
    }
}

ksort($result);
并将其输出为唯一年/月/日的嵌套列表:

  • 2019年
    • 09
      • 十七,
      • 十六,
  • 2018年
    • 08
      • 十五
  • 2017年
    • 08
      • 十四,
我希望最终得到一个多维数组,我可以循环得到年/月/日


你们能提供的任何帮助都会很好。谢谢

您可以使用
分解
。大概是这样的:

2019-09-17,
2019-09-16,
2018-08-15,
2017-08-14
$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];
}
foreach($result as &$e){
    ksort($e);
    foreach($e as &$t){
        asort($t);
    }
}

ksort($result);
将产生

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"
    }
  }
}
如果要排序,可以按如下方式进行排序:

2019-09-17,
2019-09-16,
2018-08-15,
2017-08-14
$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];
}
foreach($result as &$e){
    ksort($e);
    foreach($e as &$t){
        asort($t);
    }
}

ksort($result);

ksort
(升序)或
krsort
(降序)将按键排序,
sort
(升序)或
rsort
(降序)将按值排序

如果要对输出进行排序,应在迭代数据之前只调用一次
sort()
。为了唯一性,
$result[$dateParts[0][$dateParts[1][$dateParts[2]]=$dateParts[2]