Back to tech

phpでcsvファイルを解析

2 min read

csvファイルをphpで解析するプログラムを作りたくなったので作ってみました。

下記のようなデータが入ってるcsvファイル(uriage.csv)があるとします。

年度売上費用
20013425123
20021232453
20032344564
20043453452
20055673686
20063453565
20072352453
20083453455
20094565123
20102345435
20113454345
20123534234
20134564567
20143453232
20153245123
20168957234

あとは下記に記載されてあるソースコードにファイルを渡してあげることで多次元配列化でに出力してくれます。

二枚目は解析するcsvファイルです。

<?php
$filepath = "uriage.csv"; //csvファイル

$data = file_get_contents($filepath);
$data = mb_convert_encoding($data, 'UTF-8', 'sjis-win'); //shift-jisからutf-8へ変換

$temp = tmpfile();
$meta = stream_get_meta_data($temp);

$file = new SplFileObject($meta['uri']);
$file->setFlags(SplFileObject::READ_CSV);

foreach ($file as $key1 => $value1) {
    foreach ($value1 as $key2 => $value2) {
      $csv[$key1][$key2] = $value2;
    }
}

print_r($csv);
?>

foreachを二重にして解析をしていますが、

foreach ($file as $line) {
    $csv[] = $line;
}

でも可能です。 解析したデータにいろいろ弄りたいためforeachを二回回しています。

参考 ・“PHP ARCHIVE”, http://php-archive.net/php/csv-tsv-array/ (2015/09/14)