2014-02-21 147 views
1

我在下面的代碼掙扎,並找不到一個去解決它。該頁面加載時間過長,出現「致命錯誤:超過30秒的最大執行時間」錯誤。PHP while while循環執行時間

也許有人可以解釋或給出建議?

<?php 

    $i = 1; 
    $s = 1; 
    $limit = 21; 
    $seasons = 6; 

    while ($s < $seasons) { 
     if ($s < 10) { 
      $s = '0' . $s; 
     } 

     while ($i < $limit) { 

      if ($i < 10) { 
       $i = '0' . $i; 
      } 
      echo '<input type="checkbox" value="S' . $s . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>'; 
      ++$i; 
     } 
    } 
    ?> 

謝謝

UPDATE:

添加$ S ++之後;在firt循環結束時,代碼解決了錯誤和長負載問題,但它只運行一次,不考慮$ seasons = 6的情況。任何想法爲什麼會發生?我試圖刪除0字頭的,它仍然不循環,直到6

UPDATE:放置在功能 問題解決了,第二個循環和它的工作。謝謝大家!。

最終版本

<?php 

    $s = 1; 
    $limit = 21; 
    $seasons = 7; 

    while ($s < $seasons) { 

     if ($s < 10) { 
      $s = '0' . $s; 
     } 

     episodes($s,$limit); 

    $s++; 
    } 

    function episodes($s,$limit){ 
    $i = 1; 

    while ($i < $limit) { 
      if ($i < 10) { 
       $i = '0' . $i; 
      }   
      echo '<input type="checkbox" value="S' . $s . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>';  
      ++$i; 
     } 
    } 

?> 
+1

你是不是增加'$ s'任何地方,所以它總是** **要低於'$ seasons'(無盡循環)。你在它的開頭添加了一個零,但是這不影響循環......那個零應該在最後? –

+0

@scrowler謝謝。增加S解決了長時間加載頁面問題,沒有錯誤顯示,但第一個循環只運行一次,爲什麼它不會運行5次,因爲$ seasons = 6 – devjs11

回答

2

首先,請確保您比較整數到整數,當你執行你的比較。它是好的,如果你需要它顯示的目的,但要你的電話號碼前加「0」,在,在$s變量本身產生的顯示值,而不是部分:

$s_formatted = str_pad($s, 2, '0', STR_PAD_LEFT); 
echo '<input type="checkbox" value="S' . $s_formatted . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>'; 
++$i; 

這允許你刪除代碼中您當前使用的代碼部分中的'0'前綴。您可以刪除這些行:

if ($s < 10) { 
    $s = '0' . $s; 
} 

最後,一定要增加$s。在您當前的代碼中,$s < $seasons始終爲真,因爲$s的值永遠不會更改。如果你想$s增加每次循環,增加它是這樣的:

$s++; 
+0

怪異但是$ s_formatted ...在我的情況下沒有工作S顯示沒有0.另外第一個循環似乎只運行一次到S1E20,但爲什麼它會繼續S02E01? – devjs11

1
$s = '0' . $s; 

這只是$s前添加一個前綴0$s'01''001''0001' ...等等。

然後用整數6比較,$s意志轉化爲1

所以$s絕不會超過$seasons,它會導致死循環。

$i相同,無限循環實際上是嵌套的while循環。++$i;

如果你真的想要以0爲前綴的字符串,那麼你應該檢查字符串長度。

例子:

if (strlen($s) < 10) { 
+0

謝謝你的努力 – devjs11

-1

你缺少$ S ++,你到底外,同時,運行此代碼:

$i = 1; 
$s = 1; 
$limit = 21; 
$seasons = 6; 

while ($s < $seasons) { 
    if ($s < 10) { 
     $s = '0' . $s; 
    } 

    while ($i < $limit) { 

     if ($i < 10) { 
      $i = '0' . $i; 
     } 
     echo '<input type="checkbox" value="S' . $s . 'E' . $i . '" name="rate"/>S' . $s . 'E' . $i . '<br/>'; 
     ++$i; 
    } 
$s++; 
} 
+0

你怎麼知道他想要增加'$ s'每次一個?你純粹假設 - 它可能是十,在開始時與if語句綁定在一起......可能是任何事情。 –

+0

@ scrowler,如果他想增加一個以上的時間,他可以將代碼$ ++更改爲$ s = $ s + $ whateverTheNumberHeWantToIncrease,這不是主要問題,主要問題是他錯過了增量$ s。 ..我對嗎? –

+0

你是對的,他錯過了該變量的遞增/遞減(例如,他有'++ $ i',但不是'$ s') - 但是你在黑暗中刺入了一個值通過增加它。 –