項目数が異なる2種類のcsvファイルがあり、1行目にはヘッダー、2行目以降にデータが記載されています。
a.csv
ID,郵便番号,住所,氏名,年齢,職業,性別,備考
b.csv
ID,郵便番号,住所,氏名,性別,備考
csvファイルを読み込み、自動でaタイプかbタイプか判断し、内容を表示させたいと考えています。
一行目のヘッダーのみを読み込み、listで分解して、5番目の項目名でswitchさせれば実現できるかと思うのですが、具体的にどういうコードを書けばよいでしょうか?もっと簡便なアルゴリズムがあれば、そちらでもかまいません。
今回の条件だけであれば、7番目、8番目のカラムの存在の有無を調べて判定すれば良さそうに思います。
$fp = file('CSVファイル.csv', 'r');
if (!$fp && !feof($fp)) {
// ヘッダ行を読み込む
$line = fread($fp, 4096);
// 列をカンマで分解する
$column = explode(',', $line);
// ヘッダカラムの数で比較する
if( count($column) > 6 ) {
// a.csv タイプ
} else {
// b.csv タイプ
}
見出し行なのに、そんなことがあるんですか?!
まだ開けてもらってないけど
fgetcsv で count
fgets で ベタ比較
で回答したから私の回答じゃあ足りませんね。
単純に "職業" の有無を探しだけで足りそうですか?
順不同になったりとか条件増えたりしません?
複雑になるなら条件提示してもらって正規表現になるかな?
う~~~~ん、どうしたらいいんだ~~~~!!!!
if (count($array) == $type_a){
echo "type_a";
}
elseif (count($array) == $type_b){
echo "type_b";
}
else {
echo "error!";
}
}
こういう書き方をすると、末尾項目にデータが未入力の場合、配列にデータが格納されずに、ヘッダーとデータのカウント数値が異なってしまうのです。(´ー`)y-~~。なので、回答していただいたみたいに、ヘッダーで条件判断した後で、ループを廻すか、末尾までデータをきっちり入力しておくか、で、正常動作しました。