PHPで文字列置換するには、いくつか方法があります。しかし、置換処理の動作は関数によって違いがあり、PHPプログラミングを行うのであれば、各関数の違いをきちんと理解する必要があります。
そこで今回は、PHPで意図しない置換を発生させないために、各関数の動作について解説していきます。
目次
PHPで置換する方法
PHPで文字列を置換する方法はいくつかあります。代表的なものは次の通りです。
- str_replace関数
- str_ireplace関数
- strtr関数
今回は、オーソドックスな文字列置換方法ともいえる、上記3関数の使い方をみていきましょう。
文字列を置換する関数には、他にも指定した範囲の文字列を置換するsubstr_replace関数や、正規表現で文字列を置換するpreg_replace関数などがあります。それぞれ用途によって使い分けできるようになりましょう。
【str_replace関数】一致した文字列を全て置換する
str_replace関数は、文字列を検索して一致した全てを置換します。str_replace関数の書き方は、次の通りです。
1 |
str_replace( $検索文字列 , $置換文字列 , $検索対象文字列 [, int $count ] ); |
str_replace関数の引数には、第一引数に検索する文字列を指定して、第二引数に検索文字列と一致した場合に置換する文字列を指定します。そして、検索対象とする文字列は、第三引数に指定します。なお、置換箇所の個数を取得したい場合は第四引数を指定します。なお、str_replace関数は、返り値として置換後の文字列を返します。
それでは、実際にstr_replace関数を使って文字列の置換をしてみましょう。
1 2 3 4 5 6 7 8 9 10 |
<?php $before = 'abc,ABC,abc'; //検索文字列"a"を"d"に置換 $after = str_replace('a', 'd', $before); echo $after; ?> |
出力結果は、次のようになります。
上記のコードでは、検索文字列”a”を”d”に置換しました。
次に、第四引数を指定して置換した個数を出力してみましょう。
1 2 3 4 5 6 7 8 9 10 |
<?php $before = 'abc,ABC,abc'; //検索文字列"a"を"d"に置換 $after = str_replace('a', 'd', $before, $count); echo '置換した回数:'.$count; ?> |
出力結果は、次のようになります。
上記コードでは検索文字列”a”を2回”d”に置換したので、第四引数には「2」が格納されました。
なお、str_replace関数は配列の値を置換することもできるので、配列内の文字列を置換したい場合にも活用しましょう。
【str_ireplace関数】大文字と小文字を区別せずに置換する
str_ireplace関数は、文字列を検索する際に大文字と小文字を区別せずに置換します。str_ireplace関数の書き方は、次の通りです。
1 |
str_ireplace( $検索文字列 , $置換文字列 , $検索対象文字列 [, int $count ] ); |
str_ireplace関数の書き方は、str_replace関数と同じです。第一引数に検索する文字列を指定して、第二引数に検索文字列と一致した場合に置換する文字列を指定します。そして、検索対象とする文字列は、第三引数に指定します。置換箇所の個数を取得したい場合は、第四引数を指定し、返り値には置換後の文字列を返します。
それでは、実際にstr_ireplace関数を使って文字列の置換をしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $before = 'abc,ABC,abc'; //検索文字列"a"を"d"に置換 $after = str_ireplace('a', 'd', $before, $count); echo $after; echo '<br/>'; echo '置換した回数:'.$count; ?> |
出力結果は、次のようになります。
置換した回数:3
str_ireplace関数で置換した場合、大文字小文字の区別をしないため、str_replace関数では置換されなかった”A”も置換されました。
【strtr関数】文字列を置換する
str_replace関数とよく似た関数に、strtr関数があります。strtr関数は、str_replace関数同様、文字列を置換する関数ですが、書き方と動作に違いがあります。まず、strtr関数を使うときの書き方は、次の通りです。
1 |
strtr( $検索対象文字列, $検索文字列 , $置換文字列 ); |
strtr関数の場合、第一引数に検索対象となる文字列を指定します。第二引数と第三引数に検索する文字列と一致した場合に置換する文字列を指定します。str_replace関数とは、指定する引数の順番が違いますね。なお、返り値には、str_replace関数同様、置換後の文字列を返します。
それでは、実際にstrtr関数を使って文字列の置換をしてみましょう。
1 2 3 4 5 6 7 8 9 10 |
<?php $before = 'abc,ABC,abc'; //検索文字列"a"を"d"に置換 $after = strtr($before, 'a', 'd'); echo $after; ?> |
出力結果は、次のようになります。
出力結果は、str_replace関数を使ったときと同じになりました。しかし、strtr関数とstr_replace関数の内部で行われている処理には違いがある点に注意が必要です。
それでは、関数内部で行われる処理動作の違いがわかりやすいように、別のコードで動作の違いを確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $before = '010101'; //"0"を"1"に置換 & "1"を"0"に置換 $after1 = strtr($before,array('1' => '0', '0' => '1')); $after2 = str_replace(array('1', '0'), array('0', '1'), $before); echo 'strtr関数の場合:'.$after1; echo '<br/>'; echo 'str_replace関数の場合:'.$after2; ?> |
出力結果は、次のようになります。
str_replace関数の場合:111111
上記コードでは、strtr関数とstr_replace関数を使って、”0″と”1″を入れ替える処理を書きましたが、str_replace関数を使った場合の出力結果では、全て”1″の文字列になってしまいました。
この原因は、strtr関数は検索対象文字列に対して、「0は1に、1は0に置換する」という処理が行われます。一方、str_replace関数は検索対象文字列に対して、「まずは0を1に置換して、次に1を0に置換する」という処理が行われているためです。
この2つの関数の違いをしっかりと理解していないと、意図しない置換が行われてしまうので注意が必要です。
まとめ
PHPの文字列置換にはいくつか方法があり、少しずつ違いがあります。各関数の違いをしっかりと理解していないと、意図しないエラーとなってしまう場合もあります。
特にstrtr関数とstr_replace関数の動作は、一見すると同じように感じてしまうかもしれませんが、使い方を間違えると大きな問題に発展する場合があります。PHPで文字列置換をする際には、使う関数の動作をしっかりと理解してから利用するようにしましょう。