CSVからのデータ読み込み配列に入れる方法とは?

このQ&Aのポイント
  • CSVからデータを読み込み、配列に入れる方法を教えてください。
  • phpを使用して、CSVから保健委員のデータのみを抜き出し、配列に格納する処理について知りたいです。
  • 以下の要件を満たす処理方法を教えてください:CSVからデータを読み込み、保健委員のデータのみを配列に格納する。
回答を見る
  • ベストアンサー

CSVからのデータ読み込み配列に入れる方法について

質問させて頂きます。 プログラマとして経験が少ないため、質問内容におかしな部分があるかもしれませんが、その場合は申し訳ありません。 質問ですが、CSVからデータを読み込み、配列に入れる方法について教えて頂きたいです。 言語はphpでお願い致します。 [aaa.csv]があったとします。 以下[aaa.csv]の中身 保健委員,田中 保健委員,山田 保健委員,安藤 図書委員,丸井 図書委員,近藤 風紀委員,山口 風紀委員,板野 風紀委員,木村 このデータの中から保健委員のデータのみを抜出し、 配列に「田中,山田,安藤」このデータを格納するにはどのような処理を行えば良いでしょうか。 ご存じの方がいらっしゃいましたら宜しくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まあせっかくのcsvだからfgetcsv()の例も・・・ <?PHP $handle = fopen("aaa.csv", "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { if($data[0]==="保健委員") $hokeniin[]=$data[1]; } print_r($hokeniin); ?>

non05410
質問者

お礼

回答ありとうございます! 実は回答が来る前に完成したのですが、私が作成したものはソースがこの2倍近くあったので、無駄を省くことができ本当に勉強になりました。 早速この方法に変更させて頂きました。 改めてありがとうございます。

その他の回答 (1)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

こんな感じでいかがでしょう? これをテキトーに改良してお使いください。 <?php $DimData = file("aaa.csv"); $DimJob = array(); foreach($DimData as $i => $dat) { list($job , $name) = explode("," , trim($dat)); $DimJob[$job][] = $name; } print_r($DimJob); ?>

non05410
質問者

お礼

回答ありがとうございます! 回答が来る前に私が作成していた処理に近いことを行っていたので、今回はもうひと方の方法を採用させて頂きましたが、上記のような方法は知らなかったので大変勉強になりました。 また別の機会ではこの方法も試してみたいと思います。 ありがとうございました。

関連するQ&A

  • 配列データをCSVでダウンロードしたい

    こんばんは。お世話になっております。 題名にある「配列データをCSVで・・」に関して、2つほど質問があり投稿させていただきます。 ヤフーのAPIを利用しているのですが(テストしている段階)、検索結果は提供されたデータが配列に格納されており、それを展開して検索結果として出力しています。 と、ここで、その結果をCSVでダウンロードすべく、配列データをimplodeで配列に収めて別ファイルにGETで渡し、渡されたデータをexplodeで配列に戻し、 header("Pragma: cache;"); Header("Content-type:application/vnd.ms-excel; charset=Shift_JIS"); header("Content-Disposition: inline; filename=$fname.csv");//ファイル名は一意な名前にしています。 $csv_line = implode("\n", $items); print(mb_convert_encoding($csv_line, "SJIS", "UTF-8")); と、やっております。 そこで質問なのですが、まず1つめ。APIで提供されているデータはUTF-8なので、上記のようにmb_convert_encoding()を使っていますが、文字化けでダウンロードしたデータを読むことが出来ません。 このような場合の対処の仕方は、どのようにすれば良いのでしょうか? また、2つ目の質問ですが、配列データをCSVでダウンロードするために、配列データを別ファイルに渡しているのですが、上記のようなやり方では、implodeで変数に代入すると文字列が長すぎて、正常にデータを渡すことが出来ません。 当初はCSVを生成するときもヤフーに接続して・・と行っていたのですが、これだと2度アクセスすることになり(1日のアクセス数の上限が定められている)、出来れば1度のアクセスで得たデータを利用したいと考えているのですが、このような場合、配列データを別ファイルに渡すにはどのようにするのが理想なのでしょうか?(セッションの利用も試したが上手くいきませんでした)

    • ベストアンサー
    • PHP
  • JAVA CSV加工について

    いつもお世話になっております。 只今、JAVAのデータ(String)をCSVに出力する プログラムを作成しております String Head = "名前,年齢" String name = "山田,田中" String age = "19,27" ---CSV出力結果として--- 1列目を "名前,年齢" 2列目を "山田,19" 3列目を "田中,27" としたいのですがどうすれば良いのでしょうか 基本的な(そのまま出力)は出来ます。 宜しくお願いします

  • 配列の要素をキーにする

    Array (   [Id] => Array     (       [0] => 17       [1] => 18     )   [Name] => Array     (       [0] => 山田       [1] => 田中     ) ) のような配列があります。 これを、 Array (   [17] => 山田   [18] => 田中 ) のようにしたいのですが、どのようにすればよいでしょうか。 初心者質問で申し訳ないのですが、ご教授のほど宜しくお願い致します。

    • ベストアンサー
    • PHP
  • csv形式のデータの一部を削除して、上書きする方法

    前回も似たような(?)質問をしたんですが 今回も質問させてください。CSVに関して(CSVだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。

    • ベストアンサー
    • Perl
  • プルダウンメニューでCSVデータを出力する方法

    プルダウンメニューを作りたいと思っているのですが、 プルダウンのメニュー数が100程あるため、CSVでデータを引用して、 プルダウンメニューを作成する事はできないか考えています。 csvについてもあまり知識がなく、, で文字を区切って、配列化する事で データベース化している、という事くらいしか分かりません。 csvについての知識はともかく、 プルダウンメニューにcsvデータを引用する事はできるのでしょうか?? 初歩的な質問で申し訳ありません。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • CSVデータの区切りが「","」の読み取り方法

    CSVデータの区切りが「","」で区切られてます。 (ここから) "山田","埼玉県","男性" "田中","埼玉県","男性" "井上","栃木県","女性" "志村","千葉県","男性" (ここまで) 以下のような区切りで行うと思ってます。 (ここから) open(DB,"<$bunfile") || &error("Can't write $bunfile"); flock(DB, 1); @lines = <DB>; foreach $lines (@lines) { ($name,$addr,$seib) = split("\",\"", $lines); 省略; } (ここまで) この場合、先頭と最後の「"」が残ってしまいます。 どのような方法で削除出来るのかがわからず悩んでます。 「s/\"//g」を使用しようかとも思ったのですが、違う方法がないかと思い質問いたしました。 ご教授いただけますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • phpで、可変項目のcsvデータを読み込みたい

    csvでデータを読み込む方法はネットで見つけたのですが、下記の条件を加えた場合どうすればいいか分かりません。 ネットで見つけた方法は、ファイルを1行ごと読み込み、コンマごとに区切って配列にいれる方法です。 しかし、項目が可変の場合、名前を入れたいところに別のデータが入ったりします。 【条件】 csvの項目名は、 A,B,C,D,E,F とする それぞれの項目は、省略可能(どこが省略されるか分からない) そのため、 A,D,E,F など、項目名が少ないCSVファイルもある。 こんな場合は、どのように処理をすればよいでしょうか? 実際は、項目名が50個ほどあります。 今回の例のように、少なければ何とかできそうなのですが・・・ 【補足・データファイル】 "A","B","C","D","E","F",←項目名 "山田","太郎","東京","15","123-221","男",←データ "山田","次郎","東京","13","124-567","男", ・・・・・・・・・↓続く ・・・・・・・・・

    • ベストアンサー
    • PHP
  • csvファイルからデータをダブらないように配列に格納するには?

    PHPのスクリプトでどうやって組めばいいかわからないことがあり、 質問させていただきました。 以下のような10行×3列のカンマ区切りのファイル(test.csv)があるとします。 東京,名前1,3 神奈川,名前2,1 東京,名前3,1 愛知,名前1,1 大阪,名前2,2 京都,名前3,3 沖縄,名前1,3 東京,名前2,1 神奈川,名前3,3 福島,名前1,1 列に同じ名前のデータが入っていたりします。 (例えば1列目に東京が3つある) 1列目のデータからダブりがないように上から順に配列に格納するにはどうすればよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • CSVデータ「","」と「,」混在読取り出来ず

    ソート機能がうまく動作しなくなりました。 CSVが以下のようなものとなったときにソートがうまく動作しなくなってしまいました。 CSVデータの区切りが「","」と「,」の混在で区切られてます。 (ここから) データa "山田","埼玉県","男性" "田中","埼玉県","男性" "井上","栃木県","女性" "志村","千葉県","男性" (ここまで) だったり (ここから) データb 1,山田,埼玉県,男性,50,"予算2,000円",0 2,田中,埼玉県,男性,36,予算なし,0 3,井上,栃木県,女性,30,予算100円,0 4,志村,千葉県,男性,27,"予算300,000円",0 (ここまで) このようなテータの時もあります。 以前のアドバイスをもとに以下のように作成いたしました。 (ここから) while (my $line = <$ifh>) { if ($socnt == 0 ){$socnt++;next;} my $key = (split /\",\"/, $line)[$ccsv]; push @{$sorted{$key}}, $line; if (@{$sorted{$key}} == 1000) { open OUT, ">>./$key.tmp" or die "Can't open: $!"; print OUT @{$sorted{$key}}; close OUT; @{$sorted{$key}} = (); } } (ここまで) この場合だと my $key = (split /\",\"/, $line)[$ccsv]; データaはうまくいくのですが、データbがうまくソートが動作いたしません。 my $key = (split /,/, $line)[$ccsv]; ではデータbはうまくいくのですが、データaうまくソートが動作いたしません。 条件式で混在認識方法があるかと思っている(ないかもしれませんが、わたしには分かりません)ので質問いたしました。 ご教授いただけますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • pythonで日本語csvからデータを読み込みたい

    python初心者です。 mac上で、csvファイルからデータを読み込んでデータベースを作りたいのですが… csvの中身は、例えば ID, 名字,名前, 年齢, 出身地 1, 山田, 太郎, 30, 大阪 2, 田中, 和夫, 55, 千葉 ... のような、極めてシンプルな感じです。 色々調べて、エンコードの問題があることは理解しましたが、web上の解決策を試してもなぜかうまく行きません。(python2.7です。) #coding:utf-8 import csv inputfile = open(u'data.csv', 'rU') reader = csv.DictReader(inputfile) for r in reader: print r とすると、1行ずつ読み込めてはいますが、printしたときの日本語が読めません。 どうすれば良いのでしょうか? また、読めないですが、プログラム内でデータのやり取りをする分には問題ないのでしょうか? (例えば、1番とX番の出身地が同じ、の判定をするとか) 非常に基本的な問題だと思うのですが、sqlでデータベースを作る前のこの段階で躓いて、全然前に進めずにいます(>_<) どうか教えて下さい、宜しくお願いします。

専門家に質問してみよう