PHPで特定の文字列を置換する2つの方法です。
str_replace()
が一般的ですが、strtr()
でも置換できます。
どのように違うのか見てみましょう。
str_replace関数
特定の文字列を置換
1 2 3 |
$place = '鎌倉に行きたい'; echo str_replace('鎌倉', '琵琶湖', $place); |
琵琶湖に行きたい
鎌倉
の文字列が琵琶湖
に置換されましたね。
構文
str_replace(‘検索する値’, ‘置換後の値’, ‘置換対象の文字列’);
str_replace()
は最初から順番に置換していきます。
そして置換後の文字列、配列を返します。
配列の値を置換
1 2 3 |
$place = array('鎌倉', '琵琶湖', '湯布院'); print_r(str_replace('琵琶湖', '葉山', $place)); |
Array ( [0] => 鎌倉 [1] => 葉山 [2] => 湯布院 )
配列の中にある琵琶湖
という文字列が葉山
に置換されました。
対象が配列でも、上記のように配列の値を検索して置換することができます。
strtr関数
strtr()
は、置換対象の文字列と同じ文字数の置換が可能です。
置換された文字列は再度置換することはできません。
特定の文字列を置換
大文字を小文字に置換してみましょう。
1 2 3 |
$jp = 'Japan'; echo strtr($jp, 'J', 'j'); |
japan
Japan
のJ
が小文字のj
に置換されましたね。
構文
strtr()
は先程のstr_replace()
とは逆の配置になります。
strtr(置換対象の文字列, 検索する値, 置換後の値);
この関数は、検索する値と置換後の値が同じ文字数でないといけません。
文字数が違った場合、以下の様な不具合が発生します。
誤った置換
置換前の文字数より、置換後の文字数が少なかった場合の動作です。
1 2 3 |
$place = 'lets go to Kamakura'; echo strtr($place, 'Kamakura', 'Hayama'); |
lets go to Hayamara
Kamakura
の文字列がHayamara
と置換されてしまいました。
これは以下のように文字数が違うため、文字列を揃えて置換するためです。
Kamakura
(8文字)をHayama
(6文字)に置換Hayama
が6文字しかないため、Kamakura
のうち先頭から6文字分だけが置換されるKamakura
の残り2文字は置換されずにそのまま残る- 結果
Hayamara
と置換されてしまう
ちなみにサンプルが英語になりましたが、strtr()
は日本語などのマルチバイト文字列をうまく処理できないようです。
文字化けしたりします。
文字列を連想配列で置換
検索する値と置換後の値を連想配列で、ひとまとめにすることもできます。
1 2 3 4 |
$place = 'lets go to Kamakura'; $change = array('Kamakura'=>'Hayama'); echo strtr($place, $change); |
lets go to Hayama
Kamakura
がHayama
に置換されていますね。
文字列を連想配列で置換するときの構文は以下のとおりです。
strtr(対象の文字列, 検索する値 => 置換後の値)
第二引数に連想配列を設定しています。
連想配列のキーが検索する値で、配列の値が置換後の値となります。
連想配列のキーの文字数が長い順に置換していきます。
しかも、先ほどの誤った置換でもご紹介した、文字数が違う場合でもキチンと置換されていますね。
普段はstr_replace()
を使うことが多いかと思いますが、strtr()
も知っておくと良いでしょう。