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

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

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

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

PHP

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

Q&A

解決済

1回答

536閲覧

PHP CSVファイルアップロードについて

kazoogon

総合スコア281

CSV

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

PHP

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

0グッド

0クリップ

投稿2017/07/24 13:14

編集2017/07/24 14:59

CSVファイルをアップロードする実装をしています。
ファイルの中身は
id,name,country
1,jhon,USA
2,suzuki,JAPAN
3,carlos,SPAIN
というものです。

id部分だけをとりだしたいのですが、csvを一列ずつforeachで回すところの実装はできましたが、配列のキーの取り方で疑問におもった部分があります。
詳細はコード内に記入しました。

よろしくお願いします。

file_put_contents($filePath, mb_convert_encoding(file_get_contents($filePath), 'UTF-8', 'SJIS')); $file = new SplFileObject($filePath); $file->setFlags(SplFileObject::READ_CSV); $lineCount = 1; foreach ($file as $line) { if (empty($line[0])) { continue; } if ($lineCount = 1) { //title列を取得 $title = $line[0]; //ここを$line[id]にしてもうまくいかない、どうすれば?? $lineCount++; }else{ for($i=0; $i<=count($line); $i++){ $records[$line[0][$i]]; //←こう書いてもよいがなるべく,$line[id]のようにidと指定して書きたい。 } } }

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

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

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

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

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

miyahan

2017/07/24 14:48

やりたいことがさっぱりわかりません。インプット(CSVの中身)とアウトプット(最終的に作りたいデータ)がないと答えようがありません。また何に困っているのか書いて下さい。
guest

回答1

0

ベストアンサー

まずコードが全く動かないのは、ヘッダ行の判定をしているif文の判定式が誤っているのが原因です。if ($lineCount = 1) ではなく if ($lineCount === 1) が正解です。

で、その後の id を取り出しているところが何をしたいのかよく判らないのですが、id だけ欲しいのなら for で各カラムを回さず、単純に $line[0] で0列目だけ取り出せばよいと思うのですが・・・?


余談ですが少し手直してみます。

まず空行のチェックは、SplFileObject に DROP_NEW_LINE および SKIP_EMPTY オプションを指定すれば勝手にスキップしてくれます。

また行数の判定に $lineCount を使っていますが、foreach 文でキーを受け取るようにすれば、それで判定ができます。

それらの踏まえるとこんな感じに書けます。

php

1$file = new SplFileObject($filePath); 2$file->setFlags( 3 SplFileObject::DROP_NEW_LINE | // 行末の改行を読み飛ばす 4 SplFileObject::READ_AHEAD | // SKIP_EMPTY のために必要 5 SplFileObject::SKIP_EMPTY | // 空行を読み飛ばす 6 SplFileObject::READ_CSV 7); 8 9foreach($file as $i => $line) { 10 if ($i === 0) {continue;} // ヘッダ行をスキップ 11 print($line[0] . PHP_EOL); 12}

ご参考まで。

投稿2017/07/24 15:41

miyahan

総合スコア3095

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問