2014-04-08 3 views
0

정의되지 않은 오프셋 150 오류가 계속 발생하지만 디버깅을 위해 무엇을해야하는지 또는 무엇을해야하는지 잘 모르겠습니다. 오류 라인에 나는 그것이 내 for 루프와 관련이 있다고 믿는다.PHP에서 정의되지 않은 오프셋 150 for 루프에서 오류가 발생했습니다.

// Get Datafile 
$MyData = file("./tmp/test.txt"); 
// Get Column Headers 

$ColHeads = explode(" ", $MyData[1]); 

unset($MyData[1]); 
$LastHeader = ""; 
for ($i = 0;$i <= count($ColHeads);$i++) { 
    if ($ColHeads[$i] == $LastHeader) { //<---this is the line that errors 
     $ColHeads[$i] = $ColHeads[$i] . "1"; 
    } 
    $LastHeader = $ColHeads[$i]; 
} 

내가 잘못 가고있는 사람은 누구입니까?

및 오류입니다 :이 모호한 경우

Undefined offset: 150 

나는 죄송합니다. 나는 php에 익숙하지 않고이 디버깅을 시작할 곳이 확실하지 않다 ... 어떤 도움이라도 대단히 감사 할 것이다! 고맙습니다!

답변

2

변경하여 루프 :

for ($i = 0;$i < count($ColHeads);$i++) { 

문제는 그 루프의 마지막 반복에 $ 난 == 수 ($ ColHeads)은, 그 수에 $ 난 너무 높게 설정 것 때 $ ColHeads에있는 항목 중.

$ ColHeads에 5 개의 항목이있는 경우 해당 항목의 색인은 0에서 4 사이입니다. for 루프는 그대로 5가되고 아무 것도 없습니다. $ Colheads [5], 오류가 발생합니다.

+0

감사합니다!, 이것은 정말 도움이되었습니다. 나는 SO가 나를 허락하자마자 대답으로 표시 할 것입니다. – scapegoat17

+1

대단히 반갑습니다. 왜 문제가 있었는지에 대한 설명을 더했습니다. 당신은 그곳에있는 대부분의 방법이었습니다. 인덱스를 0에서 시작했기 때문에, 계산하기 전에 루프를 멈추게 할 필요가있었습니다 ($ ColHeads). –

+1

참고로 루프 문에서 count()를 사용하지 말고'$ cnt = count ($ ColHeads);로 바깥 쪽에서 처리하고 루프'for ($ i = 0; $ i <$ cnt; $ i ++)'. 만약 당신이 정말로 큰 배열을 가지고 있고 각 반복마다 count()를 호출하고 있다고 생각하면 ... –

2

배열 색인은 0부터 시작합니다. 그리고 Length-1으로 끝납니다. 그래야합니다 :

for ($i = 0;$i < count($ColHeads);$i++) { 
관련 문제