2014-02-21 148 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') - 但是你在黑暗中刺入了一个值通过增加它。 –