PHP 代码不是 运行 循环之前
PHP code is not running before loop
<?php
$date = '2017-08-22';
$year = substr($date, 0, 4);
$month = substr($date, 5, 2);
$day = substr($date, 8, 2);
?>
<select>
<?php
for ($i=1; $i < 30; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if($day === $i){ echo "selected"; }; ?>><?php echo $i; ?></option>
<?php } ?>
</select>
代码未执行,因为 substr
不是 for 循环之前的 运行。 select 应该在第 22 天 selected 但它没有 selecting 任何东西。如果我更改 $day = 22;
,它会起作用。我怎样才能用子字符串解决这个问题?
你正在做 ===
这是一个严格的匹配,因为你的 year/month/day 都是字符串,你的一天永远不会成功。你需要使用 ==
'22' === 22; // false
'22' == 22; // true
尝试在 substr
之后 var_dump
$ 天看看会发生什么。也就是说,您正在使用 ===
三重等于比较,它也将检查类型。 substr
returns 一个字符串,而您正在将它与一个整数进行比较,因此条件永远不会为真。
是的,我评论了一些问题,您可以使用下面的代码来修复
<?php
$date = '2017-08-22';
$dateSec = strtotime($date);
$year = date("Y",$dateSec);
$month = date("m",$dateSec);
$day = date("d",$dateSec);
$day_in_month = date("t",$dateSec);
echo "<select>";
for ($i=1; $i <= $day_in_month; $i++) {
$selected = ($day==$i) ? ' selected ':'';
echo "<option $selected value='$i'>$i</option>";
}
echo "</select>";
?>
当您通过 ===
比较值时会出现问题,因为您正在比较的值不包含相同的数据类型。 $day
包含“string
”数据类型,'$i'
包含“int
”数据类型。
所以,为了解决这个问题,有以下两种可能的解决方案,请尝试其中一种:
要么你用==
代替===
,就像这样:
if($day == $i)
或
给$day, $month & $year
变量赋值时使用(int)
数据类型,就像这样:
$day = (int)substr($date, 8, 2);
希望这对您有所帮助。
试试这个
你只需更改 <option>
标签中的下面一行。
if($day === $i)
到
if($day == $i)
<?php
$date = '2017-08-22';
$year = substr($date, 0, 4);
$month = substr($date, 5, 2);
$day = substr($date, 8, 2);
?>
<select>
<?php
for ($i=1; $i < 30; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if($day === $i){ echo "selected"; }; ?>><?php echo $i; ?></option>
<?php } ?>
</select>
代码未执行,因为 substr
不是 for 循环之前的 运行。 select 应该在第 22 天 selected 但它没有 selecting 任何东西。如果我更改 $day = 22;
,它会起作用。我怎样才能用子字符串解决这个问题?
你正在做 ===
这是一个严格的匹配,因为你的 year/month/day 都是字符串,你的一天永远不会成功。你需要使用 ==
'22' === 22; // false
'22' == 22; // true
尝试在 substr
之后 var_dump
$ 天看看会发生什么。也就是说,您正在使用 ===
三重等于比较,它也将检查类型。 substr
returns 一个字符串,而您正在将它与一个整数进行比较,因此条件永远不会为真。
是的,我评论了一些问题,您可以使用下面的代码来修复
<?php
$date = '2017-08-22';
$dateSec = strtotime($date);
$year = date("Y",$dateSec);
$month = date("m",$dateSec);
$day = date("d",$dateSec);
$day_in_month = date("t",$dateSec);
echo "<select>";
for ($i=1; $i <= $day_in_month; $i++) {
$selected = ($day==$i) ? ' selected ':'';
echo "<option $selected value='$i'>$i</option>";
}
echo "</select>";
?>
当您通过 ===
比较值时会出现问题,因为您正在比较的值不包含相同的数据类型。 $day
包含“string
”数据类型,'$i'
包含“int
”数据类型。
所以,为了解决这个问题,有以下两种可能的解决方案,请尝试其中一种:
要么你用==
代替===
,就像这样:
if($day == $i)
或
给$day, $month & $year
变量赋值时使用(int)
数据类型,就像这样:
$day = (int)substr($date, 8, 2);
希望这对您有所帮助。
试试这个
你只需更改 <option>
标签中的下面一行。
if($day === $i)
到
if($day == $i)