<?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循环之前运行。应该在第22天选择选择,但它没有选择任何东西。如果我改变$day = 22;
,它就有效。我怎么能用子串解决这个问题?
答案 0 :(得分:2)
你正在做===
,这是一个严格的匹配,因为你的年/月/日都是你今天永远不会工作的所有字符串。你需要使用==
'22' === 22; // false
'22' == 22; // true
答案 1 :(得分:1)
试试这个
您只需更改内部<option>
标记中的以下行。
if($day === $i)
以强>
if($day == $i)
答案 2 :(得分:0)
在var_dump
看到会发生什么后,尝试substr
$天。也就是说,您正在使用===
三等于比较,这也会检查类型。 substr
返回一个字符串,并将其与整数进行比较,因此条件永远不会为真。
答案 3 :(得分:0)
是的我评论了您可以在代码下方使用的一些问题来修复
<?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>";
?>
答案 4 :(得分:0)
当您通过===
比较值时会出现问题,因为您比较的值不包含相同的数据类型。 $day
包含“string
”数据类型&amp; '$i'
包含“int
”数据类型。
因此,为了解决这个问题,有两个可能的解决方案,如下所示,尝试任何一个:
您使用==
代替===
,就像这样:
if($day == $i)
OR
在为(int)
变量分配值时使用$day, $month & $year
数据类型,如下所示:
$day = (int)substr($date, 8, 2);
希望,这可能对您有所帮助。