フロント側でCSVをアップロードし、axiosでphp側に飛ばし、
php側ではCSVファイルを読み込んで配列にし、再びフロント側に返す という処理を実装しています。
概ね実装できているのですが、1列目のカラム名だけ、ダブルコーテーションが入ってしまって困っています。
フロント側(Vue.js) ※ファイルをアップロードすると呼び出されるselectedFileメソッド
methods: { selectedFile: function(e) { e.preventDefault(); this.csv_file = e.target.files[0]; const url = './hearing_csv_set.php'; let params = new FormData(); params.append('csv_file', this.csv_file); axios.post(url, params, { headers: { 'content-type': 'multipart/form-data' }, }).then(response => { console.log(response.data); this.input_num = Object.keys(response.data).length; this.accounts = []; //初期化 response.data.forEach((item)=>{ this.accounts.push(item) }) }); }, }
thenでresponse.dataを書き出してみてみると、以下のようになっていました。
idのカラム名のみ、"id"
のようにダブルコーテーションが入ってしまっています。
こちらを他のカラム名同様ダブルコーテーションなしにしたいのですがなぜこうなってしまうのか分からず…
PHP側 hearing_csv_set.php
$file_tmp_path = $_FILES["csv_file"]["tmp_name"]; $file_name = $_FILES["csv_file"]["name"]; move_uploaded_file($file_tmp_path, $file_name); //ファイルをフォルダ直下に格納 $csvArray = array(); $firstFlg = true; $keys = array(); $count = 0; $file = fopen($file_name, '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); $json = json_encode($csvArray); print $json;
こちらのCSVだけではなく、例えば
のように1列目のカラム名を変更しても、やはり1列目だけ"名前"
になってしまいます。
アドバイスいただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー