neden bu php döngü çalışmıyor?

4 Cevap php

Bu kodu vardır:

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

This works fine to generate a select input with options from 01:00 through to 24:45 at 15 minute intervals. However, if I change the code and add an if statement I get some odd results...

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

The idea is to (arbitrarily!) make the select input default to 19.30. The code above adds
selected = "selected" to every option after 19:30, not just the 19:30 option. If I change the if statement slightly to be if ($perfTime = '19:30') { ... i.e., having a single = instead of == it creates a set of options all with the value of 19:30. What am I doing wrong?

4 Cevap

Kısa cevap: her echo operasyon $ sel geçerli değerini kullanır çünkü. Ben başlangıçta boş olduğunu varsayalım, yani ilk N yankılanırken seçilen ='' içerir. Test başarılı olursa, sel "seçilmiş" olarak ayarlanır, ve sonraki her baskı = 'seçilen' seçilen içerir $. Eğer = '19 $ PerfTime kullanıyorsanız: 30 ', bir atama, yani testi her zaman başarılı ve sel her zaman $' seçildi.

Hızlı düzeltme: ='' $ sel setleri bir başka madde ekleyin. Ancak, bana bu sadece bir kod snippit olduğunu düşünüyorum yapmak başka tuhaflıklar vardır (yani her zaman yerine endeksli bir şey döngü daha $ perfTimestamp için $ ThisTime kullanarak, bu yüzden her zaman aynı zaman yazdırır?).

Bu sıfırlamak asla çünkü $sel.

Bunun yerine bu deneyin:

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

$sel açıkça yerde intitialised değildir, bu nedenle her bir döngü çalıştırmak için onun 'seçilen' değerini koruyor.

Hızlı bir düzeltme olarak döngü içinde ilk satır olarak $sel = ""; sahipsiniz.

Hm, bunu yapması gerektiğini olabilir:

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

Ben sadece bağlıyor 'seçilen' mevcut olan seçili yapar düşünüyorum.

Oops, unutmuşum: Ve

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