首页 > 解决方案 > 多个 PHP 标记中的一个 PHP 变量

问题描述

我有这个 PHP 标签:

<?php 
$date = '2018-09-01';
$end = '2018-09-' . date('t', strtotime($date));
?>

我想在同一页面的多个 PHP 标记中使用这两个变量,如下所示:

PHP 标签 1

<?php 
   while(strtotime($date) <= strtotime($end)) {
      $day_num = date('d', strtotime($date));
      $day_name = substr(date('l', strtotime($date)), 0, 2);
      $date = date("Y-m-d", strtotime("+1 day", strtotime($date)));
      echo "<th class='$day_num $day_name'>$day_num <br> <div id='day-name'>$day_name</div>";};
?>

PHP 标签 2

<?php          
   while(strtotime($date) <= strtotime($end)) {
      $day_num = date('d', strtotime($date));
      $day_name = date('l', strtotime($date));
      $date = date("Y-m-d", strtotime("+1 day", strtotime($date)));
      echo "<td class='$day_num $day_name'><input type='checkbox' class='uk-checkbox'></td>";
        };
?>

问题是它在PHP TAG 1中有效,而在PHP TAG 2中无效。

它在PHP TAG 2中显示任何输出的问题是什么。

控制台中没有显示错误。

请记住,我不能加入这两个 PHP 标记,因为它们被页面中的另一个内容分隔。

标签: php

解决方案


当您的 PHP 脚本启动时,您设置以下值:

<?php 
$date = '2018-09-01';
$end = '2018-09-' . date('t', strtotime($date)); //'2018-09-30'
?>

当您的代码输入 PHP 标记 1 时,while循环会计算两个日期之间的差异while (strtotime($date) <= strtotime($end)),它的计算结果为真,因为'2018-09-01'它小于'2018-09-30'

然后,在循环中,您的代码会更改$date变量,直到上限条件不再为真。这将在$date设置为时发生'2018-10-01'。因此,离开 PHP 标记 1 后,您的变量现在包含以下值。他们现在是一样的。

$date = '2018-10-01';
$end = '2018-09-30';

输入 PHP 标记 2 时,您会再次评估 while 循环中的条件,但while (strtotime($date) <= strtotime($end))不再为真。因此,第二个循环永远不会执行。


为了解决这个问题,将 的初始值保存$date在另一个变量中:

<?php
//Start of your script
$date = '2018-09-01';
$end = '2018-09-' . date('t', strtotime($date)); //'2018-09-30'
$start = $date;
?>

然后,当您输入 PHP 标记 2 时,将 then 错误$date替换为其初始值,该初始值现在保存在$start.

<?php
$date = $start;
while(strtotime($date) <= strtotime($end)) {
    $day_num = date('d', strtotime($date));
    $day_name = date('l', strtotime($date));
    $date = date("Y-m-d", strtotime("+1 day", strtotime($date)));
    echo "<td class='$day_num $day_name'><input type='checkbox' class='uk-checkbox'></td>";
};
?>

现在第二个循环将与第一个循环一样频繁地运行。


推荐阅读