簡體   English   中英

PHP while循環執行時間

[英]PHP while loop execution time

我在以下代碼中苦苦掙扎,無法找到解決方法。 該頁面加載時間太長,並且出現“致命錯誤:最長執行時間超過30秒”錯誤。

也許有人可以解釋或提供建議?

<?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;
        }
    }
    ?>

謝謝

更新:

添加$ s ++之后; 在firt循環結束時,代碼已解決了錯誤和長負載的問題,但僅在不考慮$ seasons = 6的情況下運行了一次。 知道為什么會這樣嗎? 我試圖刪除0前綴,但它直到6仍然沒有循環

更新:問題已解決,第二個循環放置在函數中,並且可以正常工作。 謝謝大家!。

最終版本

<?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;
        }
    }

?>

首先,請確保在執行比較時要比較整數與整數。 如果出於顯示目的需要,可以在數字前添加“ 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++;
$s = '0' . $s;

這只是在$s之前添加前綴0$s將是'01''001''0001' ...等等。

然后與整數6比較, $s將轉換為1

因此, $s永遠不會超過$seasons ,它將導致無限循環。

$i ,無限循環實際上位於嵌套的while循環中。 ++$i;

如果您確實希望字符串以0為前綴,則應該檢查字符串長度。

例:

if (strlen($s) < 10) {

您在外面缺少$ 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++;
}

暫無
暫無

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

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