PHP。当用户选择此选项时,显示所有12个月的日历

PHP。当用户选择此选项时,显示所有12个月的日历,php,Php,我有一个作业,其中包括一个“选择全年”复选框。当用户选中此框并提交时,将显示12个日历,每个月一个。除6月份外,我一直在工作。除六月外,所有日历都能完美显示。六月的日子不是以日历的形式出现,而是分布在整个页面上。我不明白这是怎么发生的,也不知道如何解决。我希望能得到一些帮助 if($isPostBack){ $whole_year=过滤输入(输入后“whole_year”); $select_year=过滤器输入(输入_POST,'select_year',过滤器验证_FLOAT); $sel

我有一个作业,其中包括一个“选择全年”复选框。当用户选中此框并提交时,将显示12个日历,每个月一个。除6月份外,我一直在工作。除六月外,所有日历都能完美显示。六月的日子不是以日历的形式出现,而是分布在整个页面上。我不明白这是怎么发生的,也不知道如何解决。我希望能得到一些帮助

if($isPostBack){
$whole_year=过滤输入(输入后“whole_year”);
$select_year=过滤器输入(输入_POST,'select_year',过滤器验证_FLOAT);
$select\u month=过滤输入(输入后,'select\u month',过滤验证\u FLOAT);
如果(全年){
$months\u to\u show=月数;
}否则{
$months_to_show=1;
}
$start_date=date_create_from_format('Y-m-d',“{$select_year}-{$select_month}-01”);
而($months\u to\u show>0){
$calendar=格式('w');
对于($fillers=0;$fillers<$week_start;$fillers++){
回声“;
}
$day\u of_week=$week\u开始;
对于($day_of_month=1;$day_of_month格式('t');$day_of_month++){
如果($day\u of_week==0){
回声';
}
回声“;
如果($day\u of_week==6){
回声';
$day\u of_week=0;
}否则{
$day_of u week++;
}
}
回声“;
$start_date->修改(“+1个月”);
$months_to_show--;
}
}否则{
}
?>

如果一个月的第一天是星期天,问题就来了。 使用相同的运算符
==
,检查两个变量的类型是否相同。 但是,变量
$week\u start
首先使用
$start\u date->format('w')初始化。因此,条件
if($day\u of_week==6)
返回
false
。然后,当PHP计算
$day\u of_week++,它将把变量转换为整数。
您将拥有序列号
'6',7,8,9,…
,并且您的表行将永远不会关闭

如果一个月的第一天不是星期天,那么变量将被转换为6之前的整数,事情就会顺利进行:
'3',4,5,6,0,1,2,3,…

因此,有两种解决方案:

  • $week\u start
    转换为开头的整数:
    $week\u start=intval($start\u date->format('w')
  • 使用简单的相等运算符
    =
    ,它不会检查两个变量的类型:
    如果($day\u of_week==6)

    • 如果一个月的第一天是星期天,你的问题就来了。 使用相同的运算符
      ==
      ,检查两个变量的类型是否相同。 但是,变量
      $week\u start
      首先使用
      $start\u date->format('w')初始化。因此,条件
      if($day\u of_week==6)
      返回
      false
      。然后,当PHP计算
      $day\u of_week++,它将把变量转换为整数。
      您将拥有序列号
      '6',7,8,9,…
      ,并且您的表行将永远不会关闭

      如果一个月的第一天不是星期天,那么变量将被转换为6之前的整数,事情就会顺利进行:
      '3',4,5,6,0,1,2,3,…

      因此,有两种解决方案:

      • $week\u start
        转换为开头的整数:
        $week\u start=intval($start\u date->format('w')
      • 使用简单的相等运算符
        =
        ,它不会检查两个变量的类型:
        如果($day\u of_week==6)

      非常感谢您的详细解释。我使用了你的第二个建议,效果非常好。非常感谢你的详细解释。我采纳了你的第二个建议,效果很好。