2012-05-28 4 views
2

데이터 배열을 CSV 파일로 저장해야합니다. 문제는 다음과 같습니다. CSV 파일을 열면 배열의 0 행이 헤더와 동일한 행에 저장된다는 것을 알 수 있습니다. 또한 헤더의 마지막 열에는 'www0'과 같은 0이 포함됩니다. 이것을 피하는 방법?데이터 배열을 CSV 파일로 저장

 header("Content-type: text/csv"); 
     header("Pragma: no-cache"); 
     saveCSV($solutionCSV); 

function saveCSV($data) { 
    $outstream = fopen("schedule.csv", "a"); 

    $headers = 'xxx, yyy, zzz, www'; 
    fwrite($outstream,$headers); 

    function __outputCSV(&$vals, $key, $filehandler) { 
     fputcsv($filehandler, $vals); 
    } 
    array_walk($data, "__outputCSV", $outstream); 
    fclose($outstream); 
} 
+0

이 어딘가에 위치를 익명 함수를 사용하지 않는 경우 특히 saveCSV '에 두 번째 호출은()'치명적인 원인이 때문에 foreach'는, array_walk()''보다 더 나은 것'간단한 '이미 선언 된 ... __outputCSV() 함수를 다시 선언 할 수 없습니다. '라인을 따라 오류가 발생했습니다. 'foreach'는 더 짧고 이해하기 쉬울 것입니다. 여러분이 지금부터 더 효율적인 코드로 돌아올 때입니다. – DaveRandom

답변

1

헤더 뒤에 줄 바꿈이 필요합니다. 탈출을 가능하게하기 위해 작은 따옴표에서 큰 따옴표로 변경하십시오. 이 윈도우를 여행하는 경우

$headers = "xxx, yyy, zzz, www\n"; 

, \r\n를 사용

$headers = "xxx, yyy, zzz, www\r\n"; 

또는, 당신도, 헤더를 작성하는 fputcsv에 의존 할 수 있습니다. 이는 일관된 형식이 될 수 있으므로 가장 안전한 방법 일 것입니다.

$headers = array('xxx', 'yyy', 'zzz', 'www'); 
fputcsv($outstream, $headers); 
+0

두 번째 솔루션은 저에게 잘 돌아갑니다. 마지막 하나는 작동하지 않습니다. 왜 그런지 모르겠습니다. 첫 번째 행에 Array0을 씁니다. –

+0

@KlausosKlausos - 마지막 버전을 시도 할 때'fwrite'를'fputcsv'로 변경 했습니까? –

+0

아, 그렇습니다. –

관련 문제