人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPを使い、下記のような処理を行うプログラムを作ってください。

文字列が1000個ほど $X に配列として格納されていて、
その文字列について、以下のように2次元配列化されている
文字列を置換するというプログラムを作ってください。

$s[1][chikanmae] を $s[1][chikanato]に、
$s[2][chikanmae] を $s[2][chikanato]に、
$s[3][chikanmae] を $s[3][chikanato]に、
(以下略)
$s[n][chikanmae] を $s[n][chikanato]に
それぞれ置換するという物です。

ただし置換する文字列や対象文字列などには
マルチバイトが一切含まれてないので、
個人的にはsrip_replaceがいいのかなと思うのですが、
他にふさわしい関数がある場合はそちらを使ってご回答ください。

なおXP、PHP5を使用しています。

2次元配列化されていているものを1000個以上
処理するということに頭が混乱しています。
またどの関数がふさわしいかということも迷ってます。

以上の点をご配慮の上、ご回答くださいますよう
よろしくお願いします。

●質問者: taroemon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2次元 PHP XP バイト プログラム
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● dedara
●20ポイント

foreach($s as $val){

$val[chikanmae] = $val[chikanato];

}

これではダメですか?

srip_replaceというのはstr_replaceのことでしょうか。

http://php.quus.net/strings/str_replace.php

こちらに詳しく書いてあります

◎質問者からの返答

ご回答ありがとうございます。


質問文はstr_replaceの書き間違いです。

ご指摘ありがとうございました。


>これではダメですか?

$X 内の文字列について置換を行うというようにしたいのですが、

その部分についてどう処理をしたらよいのでしょうか?

たぶんそれくらいのことは理解するべきなのでしょうが、

まだ学習中の身ですので、教えていただけると幸いです。


以上、よろしくお願いします。


2 ● masashi0316
●20ポイント

正規表現などを必要としない置換であれば私もstr_replaceで行うと思います。

こんな感じでしょうか。

foreach($x as $key_x => $value_x) {

foreach($s as $value_s) {

$x[$key_x] = str_replace($value_s['chikanmae'],$value_s['chikanmae'],$value_x);

}

}

はずしてたらすみません。

http://php.quus.net/strings/str_replace.php


3 ● masashi0316
●18ポイント

すみません、先ほどの回答見直したらstr_replaceの第二引数間違ってました。

コメントできないので再投稿で重ねてすみません。

foreach($x as $key_x => $value_x) {

foreach($s as $value_s) {

$x[$key_x] = str_replace($value_s['chikanmae'],$value_s['chikanato'],$value_x);

}

}

ですね。

http://php.quus.net/strings/str_replace.php

◎質問者からの返答

再度のご回答ありがとうございます。

大変勉強になりました。


4 ● pahoo
●18ポイント

コメント欄に書き込めないので、回廊欄にて失礼します。

dedaraさんの回答で疑問が残っているのだとすると、要件を確認させてください。


1.ご質問にある配列変数 $X と $s は同じことを意味していますか?

つまり、

$s[1][chikanmae] と $X[1][chikanmae] は同じ、

$s[1][chikanato]] と $X[1][chikanato]] は同じ、

$s[2][chikanmae] と $X[2][chikanmae] は同じ、

$s[2][chikanato]] と $X[2][chikanato]] は同じ、

‥‥

ということですか?


2.それとも、

$X[1] = "$s[1][chikanmae]"

$X[2] = "$s[1][chikanato]"

...

というように、配列変数 $X に文字列が格納されているのですか?


3.はたまた、

$s[1][chikanmae] の添え字 'chikanmae' を 'chikanato' に置き換えたいということですか?

◎質問者からの返答

ご回答ありがとうございます。

私の質問の仕方が悪いせいで失礼しました。

もう少し具体的な例をあげます。


Sxに住所の一覧があるとします。

例えば「東京都新宿区1丁目」とか「大阪府西成区3丁目」とかです。

$s[5][chikanmae]=東京、$s[5][chikanato]=関東地方,

$s[20][chikanmae]=大阪、$s[20][chikanato]=関西地方であるなら、

Sxに含まれてる住所のうち、$s[n][chikanmae]を全て、

$s[n][chikanato]に置換したいということです。

つまり「東京」という単語を「関東地方」に置換させて、

「東京都新宿区1丁目」を「関東地方新宿区1丁目」に、

同様に、「大阪府西成区3丁目」を「関西地方西成区3丁目」としたいのです。


説明を簡単にするために漢字を用いていますが、

検索対象や検索語にはマルチバイト文字は含まれてません。


基本的にはこちらのページで回答していただいた物の続きです。

http://q.hatena.ne.jp/1218969562

この時はただの2次元配列でしたが、連想配列にした方が良いと思ったので、

その点だけは変更してあります。


>dedaraさんの回答で疑問が残っているのだとすると、

$xの中にある文字列だけ置換する方法が知りたいということです。


以上、よろしくお願いします。


5 ● pahoo
●18ポイント

詳しい要件をありがとうございました。

str_replace を使うのであれば、以下のような感じになります。

foreach ($X as $key=>$val) {
 $X[$key] = str_replace($s[$key]['chikanmae'], $s[$key]['chikanato'], $val)
}

また、大文字・小文字を区別しないのであれば、str_ireplace を使います。

◎質問者からの返答

再度のご回答ありがとうございます。

str_ireplaceもとても参考になりました。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ