• ベストアンサー

csvの文字置換プログラム

すみません、超初心者の質問です。 今、エクセルのデータをphpを介してJsonに入れるプログラミングに取り組んでいます。 エクセル  ↓ CSV  ↓ 配列(php)  ↓ Json しかしこのcsvのデータを配列に入れる前に置換しなければならない箇所(具体的には、言葉で入っている文字をコード化したい箇所)が沢山あるのですが、phpで読み込んだcsvデータの文字列を置換する方法はありますか??(置換箇所は多岐に渡ります) 外部から毎月買い取るデータで、いちいちエクセル上で手動で置換するのではなく、PHP上で自動的に置換したいのです。。 愚問ですみません、、よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

'あああ'=>1 'いいい'=>2 'ううう'=>3 というように文字列を数字などのIDみたいに変換したいということでしょうか? ソレであった場合、IDの含まれる一覧もCSVかなんかで渡すということでしょうか? 毎回のデータ総数が恐ろしい量である、ということではないのであれば、 配列に入れてから処理したほうがやりやすいと思いますがいかがでしょうか。 実際、質問者さんがどのようなロジックで処理するのかが見えないのであれなんですが、 <?php $replace = array('あ'=>1, 'い'=>2, 'う'=>3);//言葉に対応するコードの連想配列 $result = array(); $fp = fopen('CSVのデータ', 'r'); if(!$fp) exit('開けない'); $line = fgets($fp, 4096);//改行までの1行を取得 $line = rtirm($line); //取得した文字列の最後に改行コードがくっつくのでソレを除去 $line_arr = explode(',', $line); //カンマで文字列を切り分け配列に。 //ここで、もし言葉が記述されているのが2番目(配列のインデックスでいう1)の場合 if(isset($replace[$line_arr[1]])){ $line_arr[1] = $replace[$line_arr[1]]; } $result[] = $line_arr; //又はarray_push($result, $line_arr); fclose($fp); ?> こんな感じでいかがですか?

minejas
質問者

お礼

丁寧なご回答ありがとうございました! コードを配列に入れるとスマートにいくのですね!なるほどです! 無事解決いたしました。ありがとうございます!!

その他の回答 (1)

回答No.1

mb_convert_encoding とかでもいいんじゃないの? 今日は、csvからdnsサーバのゾーンを編集するものを書いてましたが、日本語のコーディングを考えるのは面倒なので、行ごとにmb_convert_encoding で変換しましたね。 わかっているとは思いますが変換するなら配列に入れる前ですよ。 csvのカラム毎に違う漢字コードを使うような変なものでもない限り、ファイル全体か、処理の都合上なら行単位で変換の方が楽です。

minejas
質問者

お礼

丁寧なご回答ありがとうございました! 私の説明が足りず違う内容のお答えを頂きましたが、その後Jsonで文字化け問題が発生したためathanasiusさんのご回答も大変役に立ちました! ありがとうございました!!

関連するQ&A