mus*_*c80 0 php for-loop if-statement
我有这个代码:
$thisTime = gmmktime(0, 0, 0);
for($i=0; $i<=95; $i++)
{
$perfTimeNumber = ($i+1);
$perfTimestamp = $thisTime;
$perfTime = date("H:i", $perfTimestamp);
echo '<option value="'. $perfTimeNumber .'" selected="'.$sel.'">' .$perfTime .'</option>';
$thisTime = $thisTime+(15*60);
}
Run Code Online (Sandbox Code Playgroud)
这可以很好地生成一个选择输入,选项从01:00到24:45,间隔为15分钟.但是,如果我更改代码并添加if语句,我会得到一些奇怪的结果......
$thisTime = gmmktime(0, 0, 0);
for($i=0; $i<=95; $i++)
{
$perfTimeNumber = ($i+1);
$perfTimestamp = $thisTime;
$perfTime = date("H:i", $perfTimestamp);
if ($perfTime == '19:30') {
$sel = "selected";
}
echo '<option value="'. $perfTimeNumber .'" selected="'.$sel.'">' .$perfTime .'</option>';
$thisTime = $thisTime+(15*60);
}
Run Code Online (Sandbox Code Playgroud)
想法是(任意!)使选择输入默认为19.30.上面的代码
selected = "selected"在19:30之后添加到每个选项,而不仅仅是19:30选项.如果我将if语句稍微更改为 if ($perfTime = '19:30') { ...ie,则使用单个=而不是==它创建一组选项,所有选项的值均为19:30.我究竟做错了什么?
简答:因为每个回显操作都使用$ sel的当前值.我假设它最初是空白的,所以第一个N回声包含selected =''.如果测试成功,则将$ sel设置为"selected",并且每个后续打印都包括selected ='selected'.如果使用$ perfTime = '19:30',则它是一个赋值,因此测试总是成功,并且$ sel总是被"选中".
快速修复:添加一个设置$ sel =''的else子句.然而,还有其他奇怪的事情让我觉得这只是一个代码snippit(即总是使用$ thisTime for $ perfTimestamp,而不是循环索引的东西,所以它总是打印同一时间?).