トップページ >  PHP >  fgetcsvでCSV読み込み
初版2012/03/14: 最終更新日2013/05/29
fgetcsvでCSV読み込み
目次
fgetcsvでCSV読み込み
CSVの1行目をスキップする
fgetcsvでCSV読み込み
ダブルクォーテーションで囲まれたCSVファイルをfgetcsvで読み込むことが出来ます。デリミタがカンマの場合に、ダブルクォーテーション内にカンマが入っていても考慮してくれます。
第二引数に100としていますが、これは文字列長です。第三引数がデリミタですが、省略した場合、デフォルトでカンマとなります。

また、fgetcsvの戻り値は配列になります。試しにprintするとArrayと表示されます。

<?php
  // 読み込むファイル名の指定
  $file_name = "sample01.csv";
  // ファイルポインタを開く
  $fp = fopen( $file_name, 'r' );

  // データが無くなるまでファイル(CSV)を1行ずつ読み込む
  while( $ret_csv = fgetcsv( $fp, 100 ) ) {
    // 読み込んだ行(CSV)を表示する
    for($i = 0; $i < count( $ret_csv ); $i++ ){
      echo(mb_convert_encoding($ret_csv[$i],"UTF-8","auto"));
    }
    echo("<br />");
  }

  // 開いたファイルポインタを閉じる
  fclose( $fp );
?>

以下、実行例です。

NO会社名ブラック
Array ( [0] => NO [1] => 会社名 [2] => ブラック ) 1SJI○
Array ( [0] => 1 [1] => SJI [2] => ○ ) 2SCSK○
Array ( [0] => 2 [1] => SCSK [2] => ○ ) 3東和システム○
Array ( [0] => 3 [1] => 東和システム [2] => ○ ) 4システムサポート○
Array ( [0] => 4 [1] => システムサポート [2] => ○ )

CSVの1行目をスキップする
CSVのヘッダ部分をスキップしたい場合、以下のようにwhile部分でインクリメント変数が0の場合、+1してからcontinueすればよいです。
以下、ソースです。

<?php
	$ret_csv = array();
	// CSVファイルを開く
	$fp = fopen( "sample01.csv", 'r' );
	
	$i = 0;
	// データが無くなるまでファイル(CSV)を1行ずつ読み込む
	while( $arr = fgetcsv( $fp, 256 ) ) {
		if($i == 0){
			$i++;
			continue;
		}
		// 読み込んだ行(CSV)を表示する
		for($j = 0; $j < count( $arr ); $j++ ){
			$ret_csv[$i - 1][$j] = $arr[$j];
		}
		$i++;
	}

	// 開いたファイルポインタを閉じる
	fclose( $fp );
  
	print_r($ret_csv);
?>

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => SJI
            [2] => ○
        )

    [1] => Array
        (
            [0] => 2
            [1] => SCSK
            [2] => ○
        )

    [2] => Array
        (
            [0] => 3
            [1] => 東和システム
            [2] => ○
        )

    [3] => Array
        (
            [0] => 4
            [1] => システムサポート
            [2] => ○
        )

)