PHPについて質問です。

動的に生成される以下のようなCSVを集計したいと思っています。
最も良いと思われる方法を教えてください。
------------
blue,1,man
green,-1,woman
red,1,man
darkgreen,1,man
darkblue,-1,woman
geen,1,man
red,1,man
red,1,man
------------
※各色毎の合計値を算出したいです
※出来れば合計値の高い順にソートしたいです。
※各色はユーザーが自由に追加できます=固定ではありません
※出来れば性別で絞込みなんかができるとベストです
※理由があってSQL等は使用できません


よろしくお願い致します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/08/27 10:45:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:KUROX No.1

回答回数3542ベストアンサー獲得回数140

ポイント5pt

■CSVの読み方

http://phpspot.net/php/man/php/function.fgetcsv.html

fgetcsvを使って読み込む。

>PHPにはfgetcsvとかfputcsvという組み込み関数がすでに用意

>されているのでそれを用いる。

以下から情報を得ました。

http://blog.cles.jp/item/1376

配列とかに格納されたら、後は自力で・・。

id:uchisuke

関数そのものは知っていました。

知りたかったのは一連の解だったので・・・。

ありがとうございました。

2007/08/27 10:42:11
id:GEN111 No.2

回答回数472ベストアンサー獲得回数58

ポイント65pt

こんな感じでどうでしょうか。

ファイルのエラーチェックはしてませんのでよしなに。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
  </head>

  <body>
<?php
$csvfile = 'test.csv' ;
$fp = fopen($csvfile, 'r') ;

$votes_all = array() ;   // 全体
$votes_man = array() ;   // 男性
$votes_woman = array() ; // 女性

while ($line = fgets($fp)) {
  list($color, $val, $sex) = explode(',', chop($line)) ;

  // 全体
  $votes_all[$color] += $val ;

  // 男女別に
  if ($sex == 'man') $votes_man[$color] += $val ;
  else $votes_woman[$color] += $val ;
}

echo '<pre>' ;
print_r($votes_all) ;
print_r($votes_man) ;
print_r($votes_woman) ;
echo '</pre>' ;
?>
  </body>
</html>

Comma-Separated Values - Wikipedia

id:uchisuke

やはりこの方法が一般的なのですね。

ありがとうございました。

2007/08/27 10:44:17
id:zebevogue No.3

回答回数65ベストアンサー獲得回数7

ポイント10pt

合計はarray_sum

http://phpspot.net/php/man/php/function.array-sum.html

配列のソート関数を使えば良いかと。

http://phpspot.net/php/man/php/function.sort.html

id:uchisuke

こちらも関数そのものは知っています。

ありがとうございました。

2007/08/27 10:43:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません