ガリガリ書いてもいいですが、 fast-excelを使ってやるとさっとできます
https://github.com/rap2hpoutre/fast-excel
fast-excelのインストール
composer require rap2hpoutre/fast-excel
use Rap2hpoutre\FastExcel\FastExcel;
$csv = (new FastExcel)->import('data.csv');
dd($csv);
これだけで「data.csv」を読み込んで $csv にハッシュの配列形式で格納します。
CSVの1行目にカラム名を記述しておくとその名前のハッシュに変換して取り込まれます。
文字コードは utf-8 以外の場合文字化けします。 csvファイルは sjis なことが多いので、事前に変換しておきましょう。
//========================================== convertFileEncode
protected function convertFileEncode($infname="", $incode='sjis-win', $outfname="", $outcode='UTF-8', $nl="\r\n") {
if ( ! is_file($infname) ) {
die("変換失敗:{$infname} が見つかりません.");
}
$tmp_filename = getmypid().'.tmp';
$outfp = fopen($tmp_filename, 'wb');
if ($outfp === FALSE) {
die("変換失敗:{$tmp_filename} に書き込むことができません.");
}
$fp = fopen($infname,'r') or die("ファイル({$infname})のオープンに失敗しました");
while ( ($line = fgets($fp,999999)) !== false ) {
$outstr = mb_convert_encoding($line, $outcode, $incode);
$outstr = preg_replace("/\r\n|\r|\n/", $nl, $outstr);
fwrite($outfp, $outstr);
}
fclose($fp);
fclose($outfp);
rename($tmp_filename, $outfname);
chmod($outfname, 0666);
return true;
}
エラー処理は適宜書き換えてください。(とりあえず die() していますが、例外を投げた方がいいでしょう。)