2012-03-29 12 views
2

이 줄의 오류 : $an = explode(";", $f[$i]); 이 하나도 : if ($wasone) (정의되지 않은 변수) 도움이 되셨습니까? 고맙습니다.정의되지 않은 오프셋 : 9, 정의되지 않은 변수

<? 

    if ($_POST["submit"]) 
    { 
     $a = answer(); 
     $out = "Q: $ask<br>A: ".$a; 
     $tile = ($cfg["scrolling"]) ? $tile : ""; 
     echo "$out<br>$tile"; 
     echo "<input name='tile' type='hidden' id='tile' value='$out<br>$tile'>"; 
    } 

    // answers 
    function answer() 
    { 
     global $cfg, $ask; 
     $ask = (empty($ask)) ? "<empty>" : $ask; 
     $kick = array("?","\n"); 
     $ask = str_replace($kick,"",$ask); 
     $f = file($cfg["answersfile"]); 
     for ($i=0; $i<=count($f); $i++) 
     { 
      $an = explode(";", $f[$i]); 
      $a = $an[0]; 
      if (strstr($a,trim($ask))) 
      { 
       if ($wasone) 
       { 
        return("Please be more concrete"); 
       } 
       array_shift($an); 
       array_pop($an); 
       $ai = rand(0, count($an)-1); 
       // answering 
       $wasone = true; 
       $retval = $an[$ai]; 
      } 
     } 
     $retval = (empty($retval)) ? "I dont understand you. Please try again." : $retval; 
     return $retval; 
    } 
    ?> 
+1

크리스티나, 내 의견을 msonsona의 대답을 참조하십시오. 그것은 미래의 PHP 스크립트 디자인에 대한 통찰력을 증명할 수 있습니다. – Blake

답변

2

의 조건 for 루프 만 인덱스 카운트 1

+0

감사합니다.하지만 다른 오류는 어떻게해야합니까? 정의되지 않은 변수? –

+0

for 루프의 앞에 false로 초기화해야합니다. – msonsona

+0

여전히 오류는 있지만 여전히 동일합니다. –

1

라인을 0에서부터 액세스되도록하여 '='없이

$count = count($f); 
for ($i=0; $i<$count; $i++) 

이어야

for ($i=0; $i<=count($f); $i++) 

은 아마도

01이어야합니다.

count()는 $ f의 요소 수를 반환합니다.이 요소는 $ f의 마지막 요소 (이 경우 9 개)의 인덱스보다 하나 많습니다. $ i가 마지막 요소의 인덱스를지나 가기 전에 멈추고 싶다

+1

루프마다 매번 계산하는 것은 매우 나쁜 습관입니다.'for ($ i = 0, $ c = count ($ f); $ i <$ c; $ i ++)' – hamczu

1

기본적으로 배열 인덱스는 0에서 시작합니다. count($f) === 9이면 배열에 인덱스가 0, 1, 2 ... 8 인 것을 의미합니다. 루프가 $i <= 9 인 동안 인덱스 9가있는 요소에 액세스하려고하면 ... 거기에 없습니다.