関数 str_replace() は、検索語句に配列を指定すると、複数の単語を一括で置換することができます。
しかし、この動作には少し癖があるので間違えると予期していない結果になることがあります。
仮に「AB」という文字と、「DC」という文字を全て「D」に置き換えたいときに、
次のようなコードを書いたとします。
<?php $data = "ABC"; echo str_replace(array("AB", "DC"), "D", $data);
結果: D
期待される結果は「DC」となる予定でしたが、実際の結果は「D」だけになります。
まず「AB」が「D」に置き換えられ、文字列は「DC」になり、「DC」は「D」に置き換えられるので結局「D」だけが残ります。
要するに str_replace で複数の検索語句を指定した場合、最初から順番に置換を実行していくので、全て同時に置換するわけでは無いということです。
この動作は次のように書いた時と同じです。
<?php $data = "ABC"; $data = str_replace("AB", "D", $data); $data = str_replace("DC", "D", $data); echo $data;
結果: D
元々の文字列には「DC」という単語はないにもかかわらず、最初の置換が実行された結果「DC」という単語ができてしまい、欲しい結果が得られません。
それを回避するには preg_replace を使うのが簡単です。
<?php $data = "ABC"; echo preg_replace("/AB|DC/", "D", $data);
結果: DC
Similar Posts:
- [PHP]ひらがな・カタカナをローマ字に変換する
- [PHP][JS, Ajax]郵便番号を住所に変換する
- [PHP]PHP7.0での変更点とアップグレード時の対応
- [PHP]basename() はマルチバイトに対応できない?
- [PHP]異なる改行コードの置換と配列への変換
- [PHP]ソケット接続(fsockopen)でメール受信(POP3)
- [PHP]逆ポーランド記法への変換と計算
- [PHP]「mailto:」リンクでデフォルトの件名や本文に含まれるスペースや改行を正しく出力する