PHPの文字列置換でどなたか知恵をお貸しください
以下の様な文字列の変換マッピングがあり、
変換前文字列に対して、str_replaceなどを使い以下の様な変換後の文字列を返したいと考えております
実現したいこと
「変換マッピング」の内容をもとに、「変換前の文字列と期待する結果」の内容通りの値を得たい
■変換マッピング
| 変換対象文字列 | 変換後の文字列 |
|---|---|
| 04 | XX0006 |
| 06 | XX0008 |
| 08 | XX0010 |
■変換前の文字列と期待する結果
| 変換前の文字列 | 期待する結果 |
|---|---|
| 04 | XX0006 |
| 06 | XX0008 |
| 0406 | XX0006XX0008 |
試したこと
以下コードを実行したところ、表のような実行結果となってしまいました
PHP
1$subject = "04"; 2 3$search = array("04","06","08"); 4$replacement= array("XX0006","XX0008","XX0010"); 5 6$return = str_replace($search, $replacement, $subject); 7 8echo $return; 9
■上記の実行結果
| 変換前の文字列 | 期待する結果 | 実際の値 |
|---|---|---|
| 04 | XX0006 | XX00XX00XX0010 |
| 06 | XX0008 | XX00XX0010 |
| 0406 | XX0006XX0008 | XX00XX00XX0010XX00XX0010 |
上記コードでは、以下の様な動きとなっていることは理解できました
- 04
↓変換 - XX0006
↓変換後の「06」の部分だけが引っ掛かり再度変換が発生 - XX00XX0008
↓変換後の「08」の部分が引っ掛かり変換が発生 - XX00XX00XX0010
上記を解決できる方法何かありましたら、ご教授お願い致します。
追記
maisumakun 様より変換の順番を逆にすればよいのでは?とご回答いただきましたが、
変換マッピングは「例」となり、実際にはこのマッピングは第三者により、任意に設定されるものとなります
そのため、変換マッピングの並び順等を設定することが難しいため
並び順がどういう順であっても、期待する結果を得られる方法をご教授いただけるとありがたいです。
回答2件
あなたの回答
tips
プレビュー