循环之前PHP代码没有运行

时间:2017-02-18 05:51:31

标签: php html loops for-loop substr

<?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;,它就有效。我怎么能用子串解决这个问题?

5 个答案:

答案 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);

希望,这可能对您有所帮助。