質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1485閲覧

PHPでCSVファイルに列を追加してデータを追加したい

Discord

総合スコア51

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/09/12 04:50

編集2018/09/12 05:18

以下の内容を実装したいのですが、やり方がわからず困っております。
言語はPHPで、フレームワークはcakephp3です。

①CSVファイルを読み込みDB(MySQL)に登録
※CSVファイルにはユーザ情報が登録されており、一人一行で、10人いれば10行になります。
②DBに登録した際にインクリメントされたIDを取得
③①で読み込んだCSVファイルにIDを追加する列を追加し、IDを追記して、CSVファイルを更新する

①と②はできています。③のやり方がわかりません。

■CSV取得部分(便宜的に一行しかデータがないとした場合)

PHP

1$file = new \SplFileObject("CSVファイルパス"); 2$file->setFlags(\SplFileObject::READ_CSV); 3 4foreach ($file as $row) { 5 if ($row === [null]) { 6 continue; 7 } else { 8 if (empty($header)) { 9 $header = $row; 10 continue; 11 } else { 12 $csv_data["name"] = $row[0]; 13 continue; 14 } 15 } 16} 17 18$hoge_data["name"] = $csv_data["name"]; 19$user = $this->User->patchEntity($user, $hoge_data);

■DBからID取得部分

PHP

1$this->User->save($user); 2$id = $user->id;

何卒、ご教示のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

madoka9393

2018/09/12 04:52

①、②、③それぞれに分解して一つずつ試していけばよいのではでないでしょうか。 今のままでは丸投げに近いものになってしまっている気がします…。
Discord

2018/09/12 04:54

ありがとうございます。①はできました。②も取得するところまではできています。③のやり方がわからず困っております。質問文少し更新します。
madoka9393

2018/09/12 04:56

そうだったんですね。 であれば①と②についてのコードを記載し、「何をどのように試したか」等を追記してあげると、より回答しやすくなると思います。
Discord

2018/09/12 04:57

ありがとうございます。できているところまでコード載せてみます。
m.ts10806

2018/09/12 04:57

既に編集中かもしれませんが、途中までで結構ですので現在のコードを追記してください。
m.ts10806

2018/09/12 05:08

あ、コメントのタイミング被りましたね。失礼しました。
Discord

2018/09/12 05:08

ありがとうございます。コード追加しました。
madoka9393

2018/09/12 05:12

質問内容が更新されてないみたいですね…。 それはさておき、本件解決するには「php csv 書き込み」や「php csv 書き込み 追記」等で検索すると良いかもです。
Discord

2018/09/12 05:14

すみません。コード更新したのに追加されていなかったようなので、今再度追記しました!
guest

回答1

0

ベストアンサー

最初の処理

$file = new \SplFileObject("CSVファイルパス"); $file->setFlags(\SplFileObject::READ_CSV); $header=array(); $csv_data=array(); foreach ($file as $row) { if ($row === [null]) { continue; } else { if (empty($header)) { $header = $row; continue; } else { $_data=array(); for($_i=0;$_i<count($header);$_i++) { $_data[$header[$_i]]=$row[$_i]; } $csv_data[] = $_data; continue; } } } $hoge_data["name"] = $csv_data[0]["name"]; // 便宜上1個目のみ保存(^^;) $user = $this->User->patchEntity($user, $hoge_data); $this->User->save($user); $id = $user->id; $csv_data[0]["id"]=$id; // 便宜上1個目のみ保存(^^;)

保存は(http://php.net/manual/ja/splfileobject.fputcsv.php)で
これでどうでしょう?(動作確認してません)

投稿2018/09/12 10:59

編集2018/09/12 11:03
tonkun4os

総合スコア321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tonkun4os

2018/09/12 11:11

あーチョットこのままではCSV保存できませんね(^^;) チョット変えれば出来るから考えてください。(ヒントは$rowを入れてる$_dataは不要です)
Discord

2018/09/12 12:28

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問