CSVの読み込み・特定の列,行のデータ取得方法・データの書き換え・CSVファイル出力(書き込み)

下記の方法について説明します。

  • CSVファイルの読み込み
  • CSVの中身のデータである列,行の取得方法、及びデータの書き換え
  • CSVファイルの出力

 

ソースコード

CSVファイルを読み込み、CSVファイルを出力するまでのソースコードはこの様になります。

$reader = new SplFileObject('read.csv','r'); //r=read(読み込み)
$reader->setFlags(SplFileObject::READ_CSV);

$writer = new SplFileObject('write.csv', 'w'); //r=write(書き込み)



foreach($reader as $reader_line => $reader_columns) {

    //CSVファイル1行目の場合
    if($reader_line === 0){
        $writer_columns = [
            $reader_columns[0].'0列目',$reader_columns[1].'1列目',
            $reader_columns[2].'2列目',

        ];

    //CSVファイル1行目以外の場合
    }else{$csv_line = $reader_line + 1;
        $writer_columns = [
            $reader_columns[0].'です。'.$csv_line .'行目のデータです。',
            $reader_columns[1].'です。'.$csv_line .'行目のデータです。',
            $reader_columns[2].'です。'.$csv_line .'行目のデータです。',
        ];
    }//foreach 1回ごとに1行分のデータ($writer_columns)を出力
    $writer->fputcsv($writer_columns);

}

 

CSVファイルの読み込み

$reader = new SplFileObject('read.csv','r'); //r=read(読み込み)
$reader->setFlags(SplFileObject::READ_CSV);

SplFileObjectクラスの、setFlagsメソッドを使用しファイルを読み込んでいます。

これにより$readerにCSVのデータが入ります。

https://www.php.net/manual/ja/splfileobject.setflags.php

 

 

 

CSVの「列,行のデータ取得方法」と「データの書き換え」

foreach($reader as $reader_line => $reader_columns) {

    //CSVファイル1行目の場合
    if($reader_line === 0){
        $writer_columns = [
            $reader_columns[0].'0列目',$reader_columns[1].'1列目',
            $reader_columns[2].'2列目',
        ];

    //CSVファイル1行目以外の場合
    }else{$csv_line = $reader_line + 1;
        $writer_columns = [
            $reader_columns[0].'です。'.$csv_line .'行目のデータです。',
            $reader_columns[1].'です。'.$csv_line .'行目のデータです。',
            $reader_columns[2].'です。'.$csv_line .'行目のデータです。',
        ];
    }

    //foreach 1回ごとに1行分のデータ($writer_columns)を出力
}

foreach文でデータを取り出しています。

$reader_line === 0の時、CSVファイルの1行目のデータを取得しています。

foreach文で1行読み込む度に、データを「1列目〜最後の列まで($reader_columns)」配列で取得します。

 

上記のコードでやっていることはシンプルで、$reader_columns(1行分のデータ)を$writer_columnsに代入して出力しています。

$writer_columns =$reader_columns; にした場合、元々のCSVファイルと同じ内容が出力されるようになるはずです。

 

 

CSVファイルの出力

$writer = new SplFileObject('write.csv', 'w'); //r=write(書き込み)//foreach 1回ごとに1行分のデータ($writer_columns)を出力
$writer->fputcsv($writer_columns);

読み込みファイルと同じ様に、SplFileObjectクラスをインスタンス化しますが、今回は書き込み用として作成します。

SplFileObjectクラスのfputcsv()を活用して$writer_columnsを出力させれば、新たに内容が書き換えられたCSVファイルが出来ます。

 

注意点ですが、new SplFileObjectをforeach文の中に記述してしまうとforeachの配列の数だけSplFileObjectクラスがインスタンス化されてしまいますので、ご注意ください。

 

参考(出力後のファイル・ディレクトリ)

ディレクトリ構造

ディレクトリ構造

実行後のディレクトリ構造はこのようになっています。ターミナルでphp index.phpみたいに実行すれば使えます。

 

read.csv

read.csvのデータ

 

write.csv

write.csvのデータ

最終学歴高卒。実務未経験から自社開発&受託開発をしている企業に入社した、入社1年目のエンジニア。20代前半。
WordPress・PHP / Laravel・JavaScript

ひろきをフォローする

コメント

タイトルとURLをコピーしました