CSV 파일 읽기
CSV(Comma-Separated Value) 파일은 말 그대로 각각의 데이터가 콤마(,)로 구분되어 있는 텍스트 파일을 의미합니다.
다음의 CSV 파일(data.csv)에 저장된 국어, 영어, 수학 성적 데이터를 읽어서 합계와 평균을 구하는 프로그램에 대해 알아봅시다.
※ data.csv에 파일은 ex5-24.php과 같은 폴더에 존재하므로 가정합니다.
■ data.csv 파일
| 국어,영어,수학 83,94,95 93,87,88 73,98,97 85,93,82 73,95,98 |
CSV 파일의 첫 번째 줄에는 위 data.csv 파일에서와 같이 각 열의 제목이 저장됩니다. 그리고 다음 줄부터 콤마(,)로 구분된 데이터들이 들어갑니다.
예제 5-24 CSV 파일 읽기
<?php
$file = fopen("data.csv", "r"); // 02
$header = fgetcsv($file); // 03
$num = count($header); // 04
echo "<h3>5명 학생의 ".$num."과목 합계/평균 구하기</h3>";
while(!feof($file)) {
$sum = 0; // 08
$line = fgetcsv($file); // 09
foreach ($line as $v) { // 10
$sum += $v;
} // 12
$avg = round($sum/3, 2); // 13
echo "합계: ".$sum.", 평균: ".$avg."<br>"; // 14
}
fclose($file); // 17
?>

02 fopen() 함수로 data.csv 파일을 읽기 모드로 열어 $file에 저장합니다.
03 fgetcsv() 함수는 CSV 파일에서 한 줄의 데이터를 배열로 읽어옵니다. 3행은 fgetcsv($file)로 data.csv 파일에서 한 줄의 데이터를 가져와 배열 $header에 저장합니다.
04 cout($header)는 $header 배열 요소의 개수, 즉 과목의 수인 3의 값을 가집니다.
08 한 학생 성정의 합계 $sum을 0으로 초기화합니다.
09 fgetcsv($file)로 한 줄의 성적 데이터를 읽어 $line 배열에 저장합니다.
10~12 한 학생에 대한 세 과목 성적 합계 $sum을 구합니다.
13 $sum/3은 과목 성적의 평균 값을 의미합니다. round($sum/3, 2)을 이용하여 소수점 둘째 자리(셋째 자리에서 반올림)까지 값을 구하여 $avg에 저장합니다.
14 echo문을 이용하여 실행 결과에서와 같이 합계와 평균을 출력합니다.
17 fclose()을 이용하여$file, 즉 열었던 data.csv 파일을 닫습니다.