こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

csvの文字置換プログラム

すみません、超初心者の質問です。

今、エクセルのデータをphpを介してJsonに入れるプログラミングに取り組んでいます。
エクセル
 ↓
CSV
 ↓
配列(php)
 ↓
Json

しかしこのcsvのデータを配列に入れる前に置換しなければならない箇所(具体的には、言葉で入っている文字をコード化したい箇所)が沢山あるのですが、phpで読み込んだcsvデータの文字列を置換する方法はありますか??(置換箇所は多岐に渡ります)

外部から毎月買い取るデータで、いちいちエクセル上で手動で置換するのではなく、PHP上で自動的に置換したいのです。。

愚問ですみません、、よろしくお願いいたします。

投稿日時 - 2009-08-20 17:19:14

QNo.5222799

すぐに回答ほしいです

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

'あああ'=>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);
?>
こんな感じでいかがですか?

投稿日時 - 2009-08-21 03:16:29

お礼

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

無事解決いたしました。ありがとうございます!!

投稿日時 - 2009-08-24 11:59:10

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

mb_convert_encoding とかでもいいんじゃないの?
今日は、csvからdnsサーバのゾーンを編集するものを書いてましたが、日本語のコーディングを考えるのは面倒なので、行ごとにmb_convert_encoding で変換しましたね。

わかっているとは思いますが変換するなら配列に入れる前ですよ。
csvのカラム毎に違う漢字コードを使うような変なものでもない限り、ファイル全体か、処理の都合上なら行単位で変換の方が楽です。

投稿日時 - 2009-08-21 02:10:36

お礼

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

投稿日時 - 2009-08-24 12:01:40

あなたにオススメの質問