8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPでstr_replaceやstrtrを使って複数文字を置換する

Last updated at Posted at 2019-02-13

str_replaceを使って複数文字を置換する方法はググれば出てきます(例えばこのサイトとかこのサイトとか)。

連想配列を使って複数文字を置換していますが、連想配列を「array()」で書いていました。PHP 5.4 以降ではその書き方に代わって[]を使って書くことができるようになったとのことなので(ソース)、[]で記述する連想配列を使って、複数文字を置換していきます(たいして変わらないけども)。

##複数文字を置換する

PHP
<?php
  $str = 'He110 W0r1d, enj0y 5tudying';
  $replace = [
    // '置換前の文字' => '置換後の文字',
    5 => 's',
    0 => 'o',
    1 => 'l',
  ];
  echo str_replace(array_keys($replace), array_values($replace), $str);
  //結果 → 'Hello World, enjoy studying'

「str_replace」や「array_keys」や「array_values」などがどういう処理をするのかを知りたい方はググってください。にわかの知識しかない僕がここで説明するよりもずっと有用な知識が得られます。

##注意点
このサイトで説明されていることですが、str_replaceと配列を使って複数文字を置換するときは、すべてを同時に置換するのではなく、順番に置換していくんだそうです。
どういうことかというと、そのサイトの例をそのまんま使わせていただきますが、

PHP
<?php
  $str = 'ABC';
  $replace = [
    'AB' => 'D',
    'DC' => 'D',
  ];
  echo str_replace(array_keys($replace), array_values($replace), $str);
  //期待する結果 → 'DC'
  //実際の結果   → 'D'

そのサイトからの引用

まず「AB」が「D」に置き換えられ、文字列は「DC」になり、「DC」は「D」に置き換えられるので結局「D」だけが残ります。
要するに str_replace で複数の検索語句を指定した場合、最初から順番に置換を実行していくので、全て同時に置換するわけでは無いということです。

そのサイトではこの問題の対策についても論じているので、興味がある方はぜひサイトの方に飛んでください。
[PHP]str_replaceで複数置換する際に気をつけること|PHP Archive

##追記
strtr()を使えばもっと簡単にかけるみたいです。詳しくは下のtadsanさんのコメントを参照。

8
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?