2014-02-21 4 views
1

다음 코드로 고민하고 해결할 수 없습니다. 페이지를로드하는 데 너무 오래 걸리고 "치명적인 오류 : 최대 실행 시간이 30 초를 초과했습니다"라는 오류 메시지가 나타납니다.루프 실행 시간 동안 PHP

누군가가 설명하거나 조언을 줄 수 있습니까? $ s을 (를) ++ 추가 한 후

;

<?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 감사 firt 루프가 끝날 때 코드는 오류와 긴로드가 해결되었지만 $ seasons = 6 조건을 한 번만 존중합니다. 왜 그런 생각이 들었습니까? 0 프리픽스를 제거하려고 시도했지만 여전히 6까지 루핑되지 않았습니다.

업데이트 : 문제가 해결되어 두 번째 루프가 작동하고 작동했습니다. 모두에게 감사드립니다!.

이 그냥 $s 전에 접두사 0를 추가

<?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을 추가하고 있지만, 그것은 루프에 영향을 미치지 않습니다 ... 그 끝에 0이 있어야합니까? –

+0

@ scrowler 감사합니다. 해결 된 긴로드 페이지 문제를 해결하고 오류는 표시되지 않지만 첫 번째 루프는 한 번만 실행됩니다. 이유는 $ season = 6과 같이 5 회 실행되지 않습니다. – devjs11

답변

2

먼저 당신의 비교.

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

이것은 당신이 제거 할 수 있습니다 : 당신이 표시 목적으로 필요하지만 할 경우 $s 변수 자체가 대신 표시 값을 생성하는 부분에 당신의 번호 앞에 '0'을 추가 괜찮습니다 현재 코드 부분에서 '0'접두어를 사용하십시오. 다음 행을 삭제할 수 있습니다.

마지막으로 $s을 늘리십시오. 현재 코드에서 $s의 값은 변경되지 않으므로 $s < $seasons은 항상 true입니다.당신이 $s는, 각 루프 증가이처럼 증가 할 경우는 그래서 항상 **, 어디서나

$s++; 
+0

이상하지만 $ s_formatted ... 제 경우에는 작동하지 않았습니다. S는 0없이 나타납니다. 또한 첫 번째 루프는 S1E20까지 단 한 번 실행되는 것 같습니다. S02E01을 계속 하시겠습니까? – devjs11

1
$s = '0' . $s; 

최종 버전, $s'01', '001', '0001' ... 등등 일 것이다.

그런 다음 정수 6과 비교, $s 의지

그래서 $s 결코 $seasons 이상, 그것은 무한 루프가 발생할 것입니다, 1로 변환.

무한 루프는 $i과 동일하지만 실제로는 중첩 된 while 루프에 있습니다. (++$i;)

실제로 접두사 문자열이 0 인 경우 문자열 길이를 확인해야합니다.

예 :

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

노력에 감사드립니다 – devjs11

-1

외부 동안은,이 코드를 실행 당신의 $의 ++ 끝을 누락 : 당신이 실행할 때 정수로 정수를 비교하고 있는지 확인,

$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 + $로 바꿀 수 있습니다. 이것이 가장 큰 문제는 아니며, increse $ s를 놓친 것입니다. .. 내가 맞습니까? –

+0

당신은 그 변수의 증가/감소를 놓쳤다는 것이 옳다. (예를 들어,'++ $ i'는 있지만'$ s'가 아니다.) -하지만 당신은 그 값으로 어둠 속에서 찌르는 것이다. 에 의해 그것을 늘리십시오. –