2017-08-03 150 views
1

我有一个包含项目的数组。每个项目都有一个标题和startdate。现在我想按周分组这些项目。如果我查看文档,格式 - >('W') 星期星期一开始。我需要改变这个星期六。PHP数组与星期六星期六至星期五

 $items = [ 
     [ // friday 
      'title'  => 'test', 
      'startdate' => '2016-03-18', // first group 
     ], 
     [ // saturday 
      'title'  => 'test', 
      'startdate' => '2016-03-19', // second group 
     ], 
     [ // sunday 
      'title'  => 'test', 
      'startdate' => '2016-03-20', // second group 
     ], 
     [ // monday 
      'title'  => 'test', 
      'startdate' => '2016-03-21', // second group 
     ], 
     [ // saterday 
      'title'  => 'test', 
      'startdate' => '2016-03-26', // third group 
     ], 
    ]; 

我有这样的事情,但它不能正常工作

 foreach($items as $item) { 
      // group by week 
      $startDate  = \DateTime::createFromFormat('Y-m-d', $item['startdate']); 
      $currectWeek = $startDate->format('W'); 
      $saturday  = 6; 
      $friday   = 5; 

      $test = clone $startDate; 

      if($currectWeek !== 5){ 
       $test->modify('last friday'); 
      } 

      if($currectWeek !== 6){ 
       $test->modify('next saturday'); 
      } 

      $a = $test->format('W'); 

      if(!isset($items_by_week[$a])){ 
       $items_by_week[$a] = []; 
      } 

      $items_by_week[$a][] = [ 
       'title' => $item['title'], 
       'date'  => $item['startdate'], 
      ]; 
     } 
+0

什么不起作用?我看到您的$ items_by_week数组按周数分组。请让我们知道您正在寻找示例输入提供的示例输出 –

+1

我使用以下解决方案解决它:https://stackoverflow.com/questions/13128854/php-datetime-class-change-first-day-of-the星期一到星期一#answer-13129157 – Bham

回答

0

试试下面的代码

$startDate = \DateTime::createFromFormat('Y-m-d', $item['startdate']); 
$week = intval($startDate->format('W')); 
$day = intval($startDate->format('N')); 

$a = ($day < 6) ? $week-1 : $week; 
+0

我怎样才能考虑不同年份 – Bham

+0

这取决于你想要算作第一周的新年开始的最少天数。在min = 4的情况下,我的代码将工作,因为在PHP中实现DateTime – Denis

0

分组是一周(其中一周开始在周六结束上周五是加工)。这是结果,使用关闭下面的代码:

$byWeek = array(); 
foreach ($items as $item) { 
    $date = DateTime::createFromFormat('Y-m-d', $item['date']); 

    $firstDayOfWeek = 6; // Saturday 

    $difference = ($firstDayOfWeek - $date->format('N')); 
    if ($difference > 0) { $difference -= 7; } 
    $date->modify("$difference days"); 
    $week = $date->format('W'); 

    if(!isset($byWeek[$week])){ 
     $byWeek[$week] = []; 
    } 

    $byWeek[$week][] = $item; 
} 

// result 
     Array 
     (

     [31] => Array 
      (
       [0] => Array 
        (
         [title] => test 11 
         [date] => 2017-08-11 
        ) 

      ) 

     [32] => Array 
      (
       [0] => Array 
        (
         [title] => test 
         [date] => 2017-08-12 
        ) 

       [1] => Array 
        (
         [title] => test 222 
         [date] => 2017-08-12 
        ) 

       [2] => Array 
        (
         [title] => test 1 
         [date] => 2017-08-13 
        ) 

       [3] => Array 
        (
         [title] => test 2 
         [date] => 2017-08-14 
        ) 

      ) 

但现在我也想在一周内分组。所以需要如下输出

Array 
(
    [32] => Array 
     (
      [0] => Array 
       (
        [0] => Array 
         (
          [title] => test 
          [date] => 2017-08-12 
         ) 

        [1] => Array 
         (
          [title] => test 222 
          [date] => 2017-08-12 
         ) 

       ) 

      [1] => Array 
       (
        [title] => test 1 
        [date] => 2017-08-13 
       ) 

     ) 

) 
相关问题