2014-03-04 2 views
0

화면에 표시하려고하는 숫자로 가득 찬 9x9 스도쿠 행렬이 있습니다. 첫 번째 부분은 쉽게 작동하지만 파일에 행렬을 저장하려고하면 무작위로 빈 행이 생기고 이유 또는 방법을 알 수 없습니다. 이것은 9 열 그들 사이에 공간이 나에게 9 개 행을 제공하도록되어PHP fwrite()는 무작위로 빈 행을 추가합니다.

$file = fopen($fileName, "w"); 
    for ($row = 0; $row < 9; $row++) 
    { 
     for ($col = 0; $col < 9; $col++) 
     { 
      fwrite($file, $this->grid[$row][$col] . " "); 
     } 
     fwrite($file, PHP_EOL); 
    } 

    fclose($file); 

그러나 나는 다른 무언가 그리드의 숫자에 따라 각 시간을 얻을 : 여기 내가 가지고있는 코드입니다. 예를 들면 다음과 같습니다.

1 5 9 7 2 3 4 6 8 
2 3 6 4 8 5 9 7 1 

8 4 7 6 9 1 2 3 5 
3 6 8 9 4 7 1 5 2 
9 1 2 8 5 6 3 4 7 
4 7 5 1 3 2 6 8 9 

5 8 3 2 6 9 7 1 4 
7 2 4 3 1 8 5 9 6 

6 9 1 5 7 4 8 2 3 

해당 숫자의 빈 줄은 항상 같은 위치에 있습니다. 여기에 또 다른 거기에 다른 번호 하나 : 때때로

5 1 6 9 7 3 2 8 4 

2 7 3 4 8 5 9 6 1 

8 4 9 1 2 6 7 5 3 

9 5 7 6 3 1 4 2 8 

3 8 1 2 4 7 6 9 5 

6 2 4 8 5 9 1 3 7 

7 3 2 5 6 4 8 1 9 
1 6 5 7 9 8 3 4 2 

4 9 8 3 1 2 5 7 6 

그리고 다음 사실 이것처럼 좋아 보이는 하나 얻을 수 있습니다, 동일

6 4 3 7 8 9 2 5 1 
9 1 8 2 3 5 4 6 7 
5 7 2 6 1 4 8 3 9 
1 3 4 8 9 6 5 7 2 
7 9 5 3 4 2 1 8 6 
8 2 6 1 5 7 9 4 3 
2 8 7 4 6 1 3 9 5 
3 5 1 9 7 8 6 2 4 
4 6 9 5 2 3 7 1 8 

코드 만 일을하는 변경 사항은 그리드의 숫자입니다. fwrite를 echos로 바꾸면 브라우저에서 제대로 작동하고 모든 것을 올바르게 표시하지만 파일을 보내면 지저분 해집니다. 나는 어떤 일이 일어나고 있는지 전혀 모른다.

편집 : 파일의 출력은 확실히보기 시작

fwrite($file, intval($this->grid[$row][$col]) . " "); 

: 는 나는이에 라인 변경으로 그리드의 값이 너무 빨리 문자열로 저장 한 것을 발견했다. 그러나 문자열이 때때로 문제를 일으키는 이유는 아직 불확실합니다.

+0

먼저 디버깅을 수행하십시오. 출력을 보여주는 것이 좋지만, 거기에 들어가는 공백의 종류를 정확하게 표시하는 것이 좋습니다. 그 빈 줄은 여분의'\ n's입니까? '\ r \ n's? 다른 것? – Jon

+0

@ 존 그가'PHP_EOL'을 사용하고있는 코드에서 볼 수 있습니다 –

+0

어떻게 확인할 수 있습니까? 나는 PHP_EOL을 목적에 맞게 사용하고 있으므로 \ n 또는 \ r \ n을 다루지 않아도됩니다. – mmvsbg

답변

0

간단합니다. 그리드의 원래 값 중 일부는 내용이 "123"이 아니지만 "123 \ n"또는 "\ n123"입니다. 당신의 예제를 보아서 - 그것은 항상 그리드 행의 마지막 요소입니다.

intval() 대신 str_replace를 사용하여 str_replace를 사용하여 str_replace (array ("\ n", "\ r"), "", $ this-> grid [ $ x] [$ y])

관련 문제