簡體   English   中英

為什么這個php循環不起作用?

[英]why isn't this php loop working?

我有以下代碼:

$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);
            } 

這樣可以很好地生成以15分鍾為間隔的從01:00到24:45的選項的選擇輸入。 但是,如果我更改代碼並添加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。 上面的代碼添加
selected = "selected"到19:30之后的每個選項,而不僅僅是19:30選項。 如果我將if語句稍微更改為if ($perfTime = '19:30') { ...即,用一個=而不是==它將創建一組選項,所有選項的值均為19:30。 我究竟做錯了什么?

簡短的回答:因為每個單獨的回顯操作都使用$ sel的當前值。 我假設它最初是空白的,所以前N個回聲包含selected =''。 如果測試成功,則將$ sel設置為“ selected”,並且以后的所有打印都包括selected ='selected'。 如果您使用$ perfTime = '19:30',它是一個賦值,因此測試總是成功,並且$ sel總是被“選中”。

快速解決方案:添加一個else子句,將$ sel =設置為。 但是,還有其他奇怪的地方使我認為這只是一個代碼片段(即,始終將$ thisTime用作$ perfTimestamp,而不是循環索引的東西,因此它總是在同一時間打印?)。

這是因為您永遠不會重置$sel

嘗試以下方法:

$sel = $perfTime == '19:30' ? 'selected' : '';

$sel並未在任何地方顯式初始化,因此它會為每次循環運行保持其“選定”值。

嘗試$sel = ""; 作為循環中的第一行作為快速解決方案。

嗯,可能是您應該這樣做:

...
if ($perfTime == '19:30') {
  $sel = 'selected="selected"';
}else{
  $sel = "";  
}
...

我認為僅存在“ selected”屬性就可以將其選中。

糟糕,我忘記了:

 echo '<option value="'. $perfTimeNumber .'" '.$sel.'>' .$perfTime .'</option>';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM