Сортировка списка дат в массив уникальных лет / месяцев / дней - PullRequest
0 голосов
/ 20 сентября 2019

Я боролся с этим некоторое время, поэтому решил обратиться за помощью.

Мне нужно преобразовать список дат, например так:

2019-09-17,
2019-09-16,
2018-08-15,
2017-08-14

и вывестиих как вложенный список уникальных лет / месяцев / дней:

  • 2019
    • 09
      • 17
      • 16
  • 2018
    • 08
      • 15
  • 2017
    • 08
      • 14
$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);
}

Я надеюсь закончить многомерным массивом, к которому я могу перейтиполучите годы / месяцы / дни

Любая помощь, которую вы, ребята, могли бы предложить, была бы великолепна.Спасибо!

1 Ответ

1 голос
/ 20 сентября 2019

Вы можете использовать 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 (по возрастанию)) или krsort (по убыванию) будет сортировать по ключам, а sort (по возрастанию) или rsort (по убыванию) будет сортировать по значениям;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...