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

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

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

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

PHP

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

Q&A

解決済

2回答

4162閲覧

CSVに記録されたデータを集計したい

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

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

PHP

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

0グッド

0クリップ

投稿2016/08/26 09:56

###現状
PHPでCSVにアンケート結果を記録しています.データ形式は

部長,12,20
課長,14,17
社長,11,14
課長,13,20
課長,4,16
部長,3,11

のようになっています.以下,便宜上左から順に「役職」「A値」「B値」と呼称させていただきます.レコードはせいぜい100件程度です.

###やりたいこと
役職ごとの「A値の合計」と「B値の合計」と「A値/B値」を表として出力したいです.

社長 11 14 0.78
課長 31 53 0.58
部長 15 31 0.48

できれば,A値/B値でソートしたいのですが,これは自分の今の知識では難しそうです.

###考えていること
sortで配列を並べ替えて,array_sumで足すのかな,と思ったのですが役職が日本語なのでうまくいかない可能性がある?のでしょうか?PHPに不慣れな上,CSVを取り扱うのも年賀状以来で正直手も足も出なくて困っています.デキる人からするととても簡単なことだと思うのですが…….

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

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

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

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

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

kei344

2016/08/26 10:16

ご自身で書かれたコードを質問文に追記いただいたほうが回答を得られやすいと思います。
guest

回答2

0

php

1<?php 2 3$filepath = 'data.csv'; 4$file = new SplFileObject($filepath); 5$file->setFlags(SplFileObject::READ_CSV); 6 7$res = ['a' => 0, 'b' => 0]; 8foreach ($file as $line) { 9 $res['a'] += $line[1]; 10 $res['b'] += $line[2]; 11} 12 13$res['a/b'] = ($res['b'] == 0) ? null : $res['a'] / $res['b']; 14 15var_dump($res); 16

投稿2016/08/26 10:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/08/26 12:25

Notice: Undefined offset: 1 in C:\xampp\htdocs\test2\answer.php on line 17 Notice: Undefined offset: 2 in C:\xampp\htdocs\test2\answer.php on line 18 array(3) { ["a"]=> int(57) ["b"]=> int(98) ["a/b"]=> float(0.58163265306122) } と表示されました.forとforeachの意味が上手く把握できていないのですが,これはどうなっているのでしょう……?
退会済みユーザー

退会済みユーザー

2016/08/26 13:01 編集

data.csv に値が入っていない、もしくは空行があるからでは?
退会済みユーザー

退会済みユーザー

2016/08/26 13:41

解決しました.ご指摘の通り,空行がございました.
guest

0

ベストアンサー

スマートではないかも知れませんが。

php

1<?php 2$data = file("data.csv"); 3 4for ($i = 0; $i < sizeof($data); $i++) { 5 $line = explode(",", $data[$i]); 6 $valueA[$line[0]] += $line[1]; 7 $valueB[$line[0]] += $line[2]; 8} 9 10foreach ($valueA as $key => $value) { 11 $valA = $value; 12 $valB = $valueB[$key]; 13 $ratio[$key] = $valA / $valB; 14} 15arsort($ratio); 16foreach ($ratio as $key => $value) { 17 echo $key . " " . $valueA[$key] . " " . $valueB[$key] . " " . $ratio[$key] . "\n"; 18} 19?>

投稿2016/08/26 11:11

taro_nii_chan

総合スコア207

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

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

退会済みユーザー

退会済みユーザー

2016/08/26 12:23

Notice: Undefined variable: valueA in C:\xampp\htdocs\test2\answer.php on line 15 Notice: Undefined index: 部長 in C:\xampp\htdocs\test2\answer.php on line 15 Notice: Undefined variable: valueB in C:\xampp\htdocs\test2\answer.php on line 16 Notice: Undefined index: 部長 in C:\xampp\htdocs\test2\answer.php on line 16 Notice: Undefined index: 課長 in C:\xampp\htdocs\test2\answer.php on line 15 Notice: Undefined index: 課長 in C:\xampp\htdocs\test2\answer.php on line 16 Notice: Undefined index: 社長 in C:\xampp\htdocs\test2\answer.php on line 15 Notice: Undefined index: 社長 in C:\xampp\htdocs\test2\answer.php on line 16 上記のようなエラーメッセージが表示されてしまいます.この場合,あまり深刻ではないので無視できると思うのですが,後学のために是非共教えていただきたいと思います.これは,valueAやBが初期化されていないために生じるのでしょうか? また,出力されたものは社長と課長と部長が横並びでした.改行させたいのですが,この場合はどうすればよいのでしょうか?この中に直接<p>を打ってしまって良いのでしょうか?
taro_nii_chan

2016/08/26 12:58

Notice に関してはちょっとこちらで再現できてないので他の詳しい方にお譲りします。 横並びに関しては、 "\n" を "</br>" に変更して頂ければ改行されます。
退会済みユーザー

退会済みユーザー

2016/08/26 13:41

大変助かりました.逆引きしながら理解を深めることができました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問