最近仕事でcsvのデータをプログラム内で使う場面が多かったので
自分用のメモとして書きます。よかったら参考にしてください。
csvToArray.php
// csvの1列目をキーにした連想配列を返す(引数:csvファイルのパス)
function csvToArray($csvPath){
$csvArray = array();
$firstFlg = true;
$keys = array();
$count = 0;
$file = fopen($csvPath, 'r');
while ($line = fgetcsv($file)) {
if($firstFlg){
for($i = 0; $i < count($line); $i++){
array_push($keys,$line[$i]);
}
$firstFlg = false;
}else{
for($i = 0; $i < count($line); $i++){
$csvArray[$count][$keys[$i]] = $line[$i];
}
$count++;
}
}
fclose($file);
return $csvArray;
}
コピペで使えますが、もうちょっと綺麗に書けたかもしれないですね(笑)
##使い方
1列目が項目名になっているcsvファイルのパスを指定してください
opening_day.csv
"area","name","opening_day"
"トゥモローランド","スペース・マウンテン","1983-4-15"
"ウエスタンランド","ビッグサンダー・マウンテン","1987-07-04"
"クリッターカントリー","スプラッシュ・マウンテン","1992-10-1"
main.php
$opening_day = csvToArray("./opening_day.csv");
var_dump($opening_day);
##出力結果
$opening_day
array(3) {
[0]=>
array(3) {
["area"]=>
string(24) "トゥモローランド"
["name"]=>
string(30) "スペース・マウンテン"
["opening_day"]=>
string(9) "1983-4-15"
}
[1]=>
array(3) {
["area"]=>
string(24) "ウエスタンランド"
["name"]=>
string(39) "ビッグサンダー・マウンテン"
["opening_day"]=>
string(10) "1987-07-04"
}
[2]=>
array(3) {
["area"]=>
string(30) "クリッターカントリー"
["name"]=>
string(36) "スプラッシュ・マウンテン"
["opening_day"]=>
string(9) "1992-10-1"
}
}
こうしてcsvファイルをキー付きの連想配列にできました。
##csvToArray関数の説明(興味ない人は読まなくて大丈夫です)
コメントアウトで行ごとに説明してます
csvToArray.php
// csvの1列目をキーにした連想配列を返す(引数:csvファイルのパス)
function csvToArray($csvPath){
$csvArray = array(); // 返す配列(入れ物の準備)
$firstFlg = true; // 1周目の判別フラグ
$keys = array(); // 1列目の項目をキーとして保持しておく配列
$count = 0; // 2列目以降カウントする用の数値
$file = fopen($csvPath, 'r'); // ファイルを読み込む(r:読み込みモード)
while ($line = fgetcsv($file)) { // fgetcsvで行数のループ
if($firstFlg){ // 1周目 ---
for($i = 0; $i < count($line); $i++){ // 項目数のループ
array_push($keys,$line[$i]); // 先ほど宣言したキー用の配列に格納
}
$firstFlg = false; // 1周目フラグをfalse
}else{ // 2周目以降 ---
for($i = 0; $i < count($line); $i++){ // 項目数のループ
$csvArray[$count][$keys[$i]] = $line[$i]; // 先ほど宣言した返す配列に追加
}
$count++; // 配列カウントを +1
}
}
fclose($file); // ファイルを閉じる
return $csvArray; // 返送
}
##感想
fgetcsv は便利