【问题标题】:PHP Generate Array with number of month and year display based on user selectedPHP根据选择的用户生成带有月份和年份显示的数组
【发布时间】:2018-03-29 17:58:40
【问题描述】:

我有四个请求的形式:

Month_From : 11
年份_从 : 2015
Month_To : 3
Year_To : 2016

现在我需要根据用户选择的数据值生成一个包含所有月份和年份的数组:

Array (
[0] = Array(
   'month'   => '11'
   'year'    => '2015'
 );
[1] = Array(
   'month'   => '12'
   'year'    => '2015'
 );

[2] = Array(
   'month'   => '1'
   'year'    => '2016'
 );

[3] = Array(
   'month'   => '2'
   'year'    => '2016'
 );
[4] = Array(
   'month'   => '3'
   'year'    => '2016'
 );
);

【问题讨论】:

标签: php arrays


【解决方案1】:

您好,请尝试使用以下代码。我已经迭代了整个时间范围,并使用每个月来创建一个数组。

$start    = (new DateTime('2015-11-01'))->modify('first day of this month');
$end      = (new DateTime('2016-03-01'))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$period   = new DatePeriod($start, $interval, $end);
$data = array();

foreach ($period as $dt) {
    $data_month = array(
        'month' => $dt->format("m"),
        'year' => $dt->format("Y")
  );
  array_push($data, $data_month);
}
print_r($data);

【讨论】:

    【解决方案2】:

    你可以做 2 个while 循环,比如:

    $Month_From = 11;
    $Year_From = 2015;
    $Month_To = 3;
    $Year_To = 2016;
    
    $result = array();
    $tMonth = $Month_From;
    $tYear = $Year_From;
    
    while( $tYear <= $Year_To ) {
        while( ( $tMonth <= 12 && $tYear < $Year_To ) || ( $tMonth <= $Month_To && $tYear == $Year_To ) ) {
            $result[] = array(
                "month" => $tMonth,
                "year" => $tYear,
            );
            $tMonth++;
        }
    
        $tMonth = 1;
        $tYear++;
    }
    
    echo "<pre>";
    print_r( $result );
    echo "</pre>";
    

    这将导致:

    Array
    (
        [0] => Array
            (
                [month] => 11
                [year] => 2015
            )
    
        [1] => Array
            (
                [month] => 12
                [year] => 2015
            )
    
        [2] => Array
            (
                [month] => 1
                [year] => 2016
            )
    
        [3] => Array
            (
                [month] => 2
                [year] => 2016
            )
    
        [4] => Array
            (
                [month] => 3
                [year] => 2016
            )
    
    )
    

    【讨论】:

      【解决方案3】:

      您可以根据日期输入构建日期。

      我没有给你确切的代码。但只是为了提示如何存档解决方案。

      $start_date = sprintf('%s-%s-1', $start_year, $start_month);
      
      $end_date = sprintf('%s-%s-1', $end_year, $end_month);
      
      
      while (strtotime($date) <= strtotime($end_date)) {
      
          $next_date = date("Y-m-d", strtotime("first day of next month", strtotime($date)));
      
      }
      

      【讨论】:

        【解决方案4】:

        这是使用 for 循环的另一种方法。

            $m1 = 11;        $y1 = 2015;        $m2 = 3;        $y2 = 2016;
        
            $mlist = array();
            $diff = (($y2 - $y1) * 12) + ($m2 - $m1);
        
            for($i=0;$i<=$diff;$i++){
                $mlist[] = array('month'=>$m1,'year'=>$y1);
                $m1++;
                if($m1 > 12){
                    $m1 = $m1-12;
                    $y1++;
                }
            }
        
            echo "<pre>";
            print_r($mlist);
            echo "</pre>";
        

        【讨论】:

          【解决方案5】:

          只能使用数组函数范围

          //months 1-12
          
          $fromMonth = 11;
          $fromYear = 2015;
          $toMonth = 3;
          $toYear = 2016;
          
          $years = range($fromYear, $toYear);
          foreach($years as $year) {
          
            $months = range(1, 12);
          
            if($year==$fromYear) {
              $months = range($fromMonth, 12);
            }
            elseif($year==$toYear) {
              $months = range(1, $toMonth);
            }
          
            foreach($months as $month) {
              $ret[] = [
                  'year' => $year,
                  'month' => $month,
              ];
            }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-03-02
            • 1970-01-01
            • 2018-09-07
            • 2012-02-24
            • 2016-11-05
            • 1970-01-01
            • 2019-02-13
            相关资源
            最近更新 更多