PHP
sort
CSV
CSVインポート

【PHP】インポートするCSVのヘッダがテーブルのカラムと同じかチェックを行う処理

CSVインポート処理とか作るじゃないですか

作るじゃないですか。
というか作らざるを得ない場合があるじゃないですか。
そういう時、登録する前にCSVファイルをあらゆる方向からチェックする必要があると思うので、
取り急ぎ、読み込まれたCSVファイルのヘッダがまずもって想定しているフォーマット通りなのかをチェックする処理を実装してみます。

CSVヘッダとテーブルのカラムが同じかをチェックする処理の実装

※前提としてCSVヘッダと登録するテーブルのカラムが同じの場合を想定しています。

引数$csvHeaders$columnsには項目名を入れた配列を渡してやる。

/**
 * テーブルのカラムとCSVヘッダとが等しいかのチェック処理
 *  
 * @param array $columns
 * @param array $csvHeaders
 * @return bool
 */
public function isRegisterableThisCsvFile(array $csvHeaders, array $columns)
{
    sort($csvHeaders);
    sort($columns);
    return ($columns === $csvHeaders);
}

からくりとしては配列をそれぞれソートして最後に比較し、両方とも全く同じであればtrueを返す、ということをしてます。

おわり

  • この処理以外にもデータの中身が登録値として正しいかチェックする処理も必要ですな(バリデーション)
  • CSVインポート機能って、社内システムとか身内のみ使う想定ならいいけど、toCのサービスとかだと、実装時に胸焼けしそう