2013-06-26 4 views
0

다음은 내 CSV 파일입니다. 보시다시피, 5 열이고 5 열에는 쉼표로 구분 된 여러 옵션이 있습니다. 당신이 할 수 여기에 PHP str_getcsv가 예기치 않은 배열 출력을 생성합니다.

column 1,column 2,column 3,column 4,column 5 
value,value,value,value,"value, value2, value3" 
val,val,val,val,"opt, opt2, opt3" 

내가 위를 구문 분석 사용하고 코드 ...

$csvData = file_get_contents('test2.csv'); 

$csvNumColumns = 5; 
$csvDelim = ','; 
$csvEnclosure = '"'; 

$results = array_chunk(str_getcsv($csvData, $csvDelim, $csvEnclosure), $csvNumColumns); 
print_r($results); 

는 다음 내에서 print_r의 출력이 될 때 ...

Array 
(
[0] => Array 
    (
     [0] => column 1 
     [1] => column 2 
     [2] => column 3 
     [3] => column 4 
     [4] => column 5 
value 
    ) 

[1] => Array 
    (
     [0] => value 
     [1] => value 
     [2] => value 
     [3] => value, value2, value3 
val 
     [4] => val 
    ) 

[2] => Array 
    (
     [0] => val 
     [1] => val 
     [2] => opt, opt2, opt3 
    ) 
) 

입니다 어떤 이유에서인지 정확히 파싱되지 않았습니다. 저는 새로운 라인으로 그리고 다시 쉼표로 폭발시킬 수 있다고 생각합니다. 그러나 이것이 왜 작동하지 않는지 이해하고 싶습니다.

답변

0

str_getcsv()은 한 행만 반환하지만 모든 행을 원합니다. 대신 루프에 fgetcsv을 사용하십시오. fgetcsv는 파일 포인터를 사용하므로 이전 행의 구문 분석을 중단 한 위치를 추적 할 수 있으므로 다음에 호출 할 때 올바른 위치 (다음 CSV 행)에서 파싱이 계속됩니다.

+0

또는 문자열을 분해 ("\ n") 한 다음 각 행을 반복하고 str_getcsv – ina

+0

@ina로 피드하면 필드에 개행 문자가 포함되면 실패합니다. – goat

관련 문제