- ベストアンサー
配列データのグループ別け
こんばんは。お世話になっております。 下記のような配列があり、各データの先頭にある番号(02_01とか)をグループごとに別けてカウントしたいのですが、この場合どのような手順で行ったら良いのでしょうか? Array ( [0] => 02_01 斉藤 ***@***.com [1] => 02_02 高木 ***@***.net [2] => 02_03 佐藤 ***@***.ne.jp [3] => 01_01 高橋 ***@***.com [4] => 02_01 鈴木 ***@***.co.jp [5] => 02_01 池田 ***@***.net [6] => 02_02 山田 ***@****.com ) ※上記各データのスペースは、全角スペースにて記述してますが、実際はタブ区切りとなっています。 やりたいこと、その1 以下のように、各グループ単位での件数を取得したい。 02_01 3件 02_02 2件 02_03 1件 01_01 1件 やりたいこと、その2 その1で別けた結果が何パターンあるか?を知りたく、上記例の場合、結果を4と返したい。 教えて君のようで恐縮ですが、色々と調べてはいるものの、DBでいうgroup by 句のような使い方が判らず、質問させていただきました。 お忙しい中恐縮ですが、アドバイスのほど宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たとえばこんな感じで集計してみては? <? $a=Array ( "02_01 斉藤 ***@***.com" ,"02_02 高木 ***@***.net" ,"02_03 佐藤 ***@***.ne.jp" ,"01_01 高橋 ***@***.com" ,"02_01 鈴木 ***@***.co.jp" ,"02_01 池田 ***@***.net" ,"02_02 山田 ***@****.com" ); foreach($a as $val){ if(preg_match("/(.*?)\t(.*)$/",$val,$match)) $b[$match[1]][]=$match[2]; } foreach($b as $key=>$vals){ print $key.":".count($vals)."件<br>"; } print "全体:".count($b)."件"; ?>
その他の回答 (1)
- UmJammer
- ベストアンサー率58% (115/196)
foreachなどのループ処理で最初に挙げられた配列の全てをあたって、「やりたいこと、その1」の形の連想配列を作れば、とりあえず所望の処理は実現できると思います。 この場合、「やりたいこと、その2」はcount関数でその連想配列の要素数を取得すればよいことになります。
お礼
UmJammerさんへ はじめまして、こんにちは。投函後、早速のお返事を有難う御座います。 No2のyambejpさんが具体的なソースを書いて下さりましたが、考え方として、とても貴重なアドバイスと思っております。有難う御座いました。
お礼
yambejpさんへ こんにちは。お世話になっております。投函後の早速のお返事を有難う御座います。 No1のUmJammerさんからご指導いただいた流れと同じようですが、考え方としてはもちろん、具体的なソースをご提示してくださり、とても感謝しております。 もちろん、これで解決出来ました!有難う御座いました。