LoginSignup
0
1

More than 3 years have passed since last update.

【PHP初心者】簡単!csvファイルをエンコードし取得

Posted at

SplFileObjectを用いて、簡単にcsvファイルの中身を取得できるため参考にしてください。

サンプルコード

/**
 * @param string $file_name
 * @param string $from_encoding
 * @param string $to_encoding
 * @return array
 */
public function csvFileImport(
    string $file_name,
    string $from_encoding = 'SJIS-win',
    string $to_encoding = 'UTF-8'
) {
    // ファイルの取得
    $csv = new \SplFileObject($file_name);
    // フラグのセット
    $csv->setFlags(\SplFileObject::READ_CSV);
    // ポインタの初期化
    $csv->rewind();
    $csv_data = [];
    foreach ($csv as $per_row) {
        // ヘッダ行はスキップ
        if ($csv->key() == 0) {
            continue;
        }

        // 空行はスキップ
        if (count($per_row) == 0) {
            continue;
        }

        foreach ($per_row as &$per_value) {
            // 値毎の処理がある場合はここに記載

            // 文字エンコード
            $per_value = mb_convert_encoding($per_value, $to_encoding, $from_encoding);
        }

        // バリデーションを行う場合はここに記載

        $csv_data[] = $per_row;
    }
    return $csv_data;
}

フラグ説明

フラグ名 説明
DROP_NEW_LINE 行末の改行を読み飛ばす。
READ_AHEAD 先読み/巻き戻しで読み出す。
SKIP_EMPTY ファイルの空行を読み飛ばす。READ_AHEADと併用すること。
READ_CSV CSVを行として読み込んでいく。

PHPのVersion 5.3.9でSKIP_EMPTYの値が6から4に変更されました。

こちらのように不安定であるため、DROP_NEW_LINEREAD_AHEADSKIP_EMPTYは使わない方が良いと思います!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1