PHP循环执行时间

时间:2014-02-21 02:51:31

标签: php foreach while-loop

我正在努力使用以下代码,无法找到解决方法。该页面加载时间过长,出现“致命错误:超过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 ++之后;在第一个循环结束时,代码解决了错误和长时间加载,但它只运行一次,不考虑$ 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;
        }
    }

?>

3 个答案:

答案 0 :(得分: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始终为true,因为$s的值永远不会更改。如果您希望$s随每个循环增加,请按以下方式递增:

$s++;

答案 1 :(得分:1)

$s = '0' . $s;

这只是在0之前添加前缀$s$s将是'01''001''0001' ...等等。

然后与整数6进行比较,$s将转换为1

所以$s永远不会超过$seasons,它会导致无限循环。

$i相同,无限循环实际上是嵌套的while循环。++$i;

如果你真的想要前缀为0的字符串,那么你应该检查字符串长度。

示例:

if (strlen($s) < 10) {

答案 2 :(得分:-1)

你错过$ s ++ end of you outer,运行这段代码:

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