我有这段代码:
$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);
}
这可以很好地生成一个选择输入,选项从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);
}
这个想法是(任意!)使选择输入默认为19.30。上面的代码添加了
19:30之后的每个选项selected = "selected"
,而不仅仅是19:30选项。如果我将if语句略微更改为if ($perfTime = '19:30') { ...
,即只有一个=
而不是==
,则会创建一组值为19:30的选项。我做错了什么?
答案 0 :(得分:5)
简短回答:因为每个回显操作都使用$ sel的当前值。我假设它最初是空白的,所以第一个N回声包含selected =''。如果测试成功,则将$ sel设置为“selected”,并且每个后续打印都包括selected ='selected'。如果你使用$ perfTime = '19:30',它就是一个赋值,所以测试总是成功,$ sel总是被“选中”。
快速修复:添加一个设置$ sel =''的else子句。然而,还有其他奇怪的事情让我觉得这只是一个代码snippit(即总是使用$ thisTime for $ perfTimestamp,而不是循环索引的东西,所以它总是打印同一时间?)。
答案 1 :(得分:4)
这是因为您从未重置$sel
。
请改为尝试:
$sel = $perfTime == '19:30' ? 'selected' : '';
答案 2 :(得分:0)
$sel
没有明确地在任何地方进行初始化,因此它为循环中的每次运行维护其“选定”值。
尝试将$sel = "";
作为循环中的第一行作为快速修复。
答案 3 :(得分:0)
嗯,可能你应该这样做:
...
if ($perfTime == '19:30') {
$sel = 'selected="selected"';
}else{
$sel = "";
}
...
我认为只有'selected'属性存在才会被选中。
哎呀,我忘记了: echo '<option value="'. $perfTimeNumber .'" '.$sel.'>' .$perfTime .'</option>';