- ベストアンサー
PHPの外部ファイルの読み込み後の加工方法
- PHPで外部のTXTファイルを読み込んだ後、時間ごとと日ごとの集計を行いたいです。
- また、合計Aと合計Dのデータを集計した結果を表示したいです。
- 初心者なので、どのように処理すれば良いか教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ありゃ^^ やっぱりbもcも必要なんですね。 せっかくなので、日ごとも算出できるように修正してみました。 // すいません。かなり変わりました(^^; $list = @file("data.txt"); if(!empty($list)){ $result = array(); foreach($list as $val){ if($val == ""){continue;} list($data["time"],$data["a"],$data["b"],$data["c"],$data["d"]) = explode("\t",$val); // 時間 $hour = date('H',strtotime($data["time"])); // 日単位 $day = date('d',strtotime($data["time"])); if(!isset($result["hour"][$hour])){ $result["hour"][$hour]["a"] = 0;$result["hour"][$hour]["b"] = 0;$result["hour"][$hour]["c"] = 0;$result["hour"][$hour]["d"] = 0; } if(!isset($result["day"][$day])){ $result["day"][$day]["a"] = 0;$result["day"][$day]["b"] = 0;$result["day"][$day]["c"] = 0;$result["day"][$day]["d"] = 0; } foreach(range('a', 'd') as $letter){ $result["hour"][$hour][$letter] += $data[$letter]; $result["day"][$day][$letter] += $data[$letter]; } } // 時間ごと echo "<p>時間ごと</p>"; foreach($result["hour"] as $key => $val){ echo "<div>".$key."時台 / a:".$val["a"]." , b:".$val["b"]." , c:".$val["c"]." , d:".$val["d"]."</div>"; } // 日ごと echo "<p>日ごと</p>"; foreach($result["day"] as $key => $val){ echo "<div>".$key."日 / a:".$val["a"]." , b:".$val["b"]." , c:".$val["c"]." , d:".$val["d"]."</div>"; } } else{echo "no data";}
その他の回答 (2)
- mikemike7
- ベストアンサー率87% (97/111)
簡単に書いてみました // 未テストです(^^; $list = @file("data.txt"); if(!empty($list)){ $result = array(); foreach($list as $val){ if($val == ""){continue;} $data = explode("\t",$val); // 時間のみ $time = date('H',strtotime($data["0"])); // 日単位 //$time = date('d',strtotime($data["0"])); if(isset($result[$time]["a"])){$result[$time]["a"] += $data["1"];} else{$result[$time]["a"] = $data["1"];} if(isset($result[$time]["d"])){$result[$time]["d"] += $data["4"];} else{$result[$time]["d"] = $data["4"];} } foreach($result as $key => $val){ echo "<div>".$key."時台 / a:".$val["a"]." , d:".$val["d"]."</div>"; } } else{echo "no data";}
お礼
ご連絡ありがとうございます。 また、コードまで書いてくださって感謝にたえません! お返事が遅くなってしまって申し訳なかったです。 コードを見せてもらって、それでも案の定、ちんぷんかんぷんで、一人でぐーぐー唸っていました。 書いていただいた、この部分をc、にもdにも当てはめていったらいいんですよね。 この部分が実は良くわからないんです。^^; というよりも、全部わからないのですけれど。 //$time = date('d',strtotime($data["0"])); if(isset($result[$time]["a"])){$result[$time]["a"] += $data["1"];} else{$result[$time]["a"] = $data["1"];} if(isset($result[$time]["d"])){$result[$time]["d"] += $data["4"];} else{$result[$time]["d"] = $data["4"];} とにかく、すごくたすかりました! 感謝です!
補足
わ、できました!!! さっきの場所、 f(isset($result[$time]["a"])){$result[$time]["a"] += $data["1"];} else{$result[$time]["a"] = $data["1"];} if(isset($result[$time]["b"])){$result[$time]["b"] += $data["2"];} else{$result[$time]["b"] = $data["2"];} if(isset($result[$time]["c"])){$result[$time]["c"] += $data["3"];} else{$result[$time]["c"] = $data["3"];} if(isset($result[$time]["d"])){$result[$time]["d"] += $data["4"];} else{$result[$time]["d"] = $data["4"];} に変更して、 テストで、 ―――― 2011/06/22 21:57:19 0 1 5 3 2011/06/22 20:55:28 2 1 26 2 2011/06/22 17:53:40 4 0 10 0 2011/06/22 17:26:26 3 0 7 6 2011/06/22 16:21:12 3 0 11 8 ―――― 上記のデータを出力すると、 ―――― 21時台 / a:0 , b:1 , c:5 , d:3 20時台 / a:2 , b:1 , c:26 , d:2 17時台 / a:7 , b:0 , c:17 , d:6 16時台 / a:3 , b:0 , c:11 , d:8 ―――― 完璧です。すごい!感謝です。 甘えまくってしまって申し訳ないのですが、一日あたりのトータルはどう出すんでしょう。^^; もうちょっと唸ってみます。 このたびは本当にありがとうございました!
- yambejp
- ベストアンサー率51% (3827/7415)
仕様がきちんと提示されていない 一行目は 4桁/2桁/2桁 2桁:2桁:2桁+4桁だけど、他の行は最後が5桁 固定長ではないなら、ABCDはどういう仕様なのか提示しなければ 話にならない・・・ ちなみにこの手の集計はPHPでできないことはないが SQLなどでやる方が一般的です。そういう選択肢はないですか?
お礼
ご連絡どうもありがとうございます! >仕様がきちんと提示されていない すみません。仕様というのがどういうものか良くわかっていません。 全ての項目が、TABで区切られてあって、 一行目でしたら、2011/06/22 21:57:19までで、ひとくぎり、TAB、次が、0、TAB、1、TAB、0、TAB、07、TAB、となっています。 これがずらーとある状態なんです。 ―― 2011/06/22 21:57:19 0 1 0 07 2011/06/22 20:55:28 2 1 2 50 2011/06/22 17:53:40 4 0 0 80 2011/06/22 17:26:26 3 0 0 40 2011/06/22 16:21:12 3 0 0 80 . . . が、ずらずらずらーとあるんです。 ―― >SQLなどでやる方が一般的です。 SQLというのを聞いた事もないのです。こまりました。 早速調べてみます。 このたびはご意見いただきまして感謝しています。
お礼
ほんとに素晴らしい!! 完璧すぎて、本当に感動しました。 これ一週間ぐらいずっとずっと悩んでたんです。 まったくの初心者だから、ぜんぜん手も足もでなくて、そういえば!とGOOを思い出したのでした。 けれど、そもそもどうやって質問していいのかも分からないありさま。 こんなに迅速に解決でき、しかも今日までまったく知らなかった方に助けてもらってってのが、ものすごく嬉しい。 感謝しても、しても、しても、し切れません。 本当にどうもありがとうございました!!!!