PHPで文字列を置換する-str_replace, strtr-

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで特定の文字列を置換する2つの方法です。

str_replace()が一般的ですが、strtr()でも置換できます。

どのように違うのか見てみましょう。

 

str_replace関数

特定の文字列を置換

琵琶湖に行きたい

鎌倉の文字列が琵琶湖に置換されましたね。

構文

str_replace(‘検索する値’, ‘置換後の値’, ‘置換対象の文字列’);

str_replace()は最初から順番に置換していきます。

そして置換後の文字列、配列を返します。

配列の値を置換

Array ( [0] => 鎌倉 [1] => 葉山 [2] => 湯布院 )

配列の中にある琵琶湖という文字列が葉山に置換されました。

対象が配列でも、上記のように配列の値を検索して置換することができます。

参考:print_r関数で配列を表示

strtr関数

strtr()は、置換対象の文字列と同じ文字数の置換が可能です。

置換された文字列は再度置換することはできません。

特定の文字列を置換

大文字を小文字に置換してみましょう。

japan

JapanJが小文字のjに置換されましたね。

構文

strtr()は先程のstr_replace()とは逆の配置になります。

strtr(置換対象の文字列, 検索する値, 置換後の値);

この関数は、検索する値と置換後の値が同じ文字数でないといけません。

文字数が違った場合、以下の様な不具合が発生します。

誤った置換

置換前の文字数より、置換後の文字数が少なかった場合の動作です。

lets go to Hayamara

Kamakuraの文字列がHayamaraと置換されてしまいました。

これは以下のように文字数が違うため、文字列を揃えて置換するためです。

 

  1. Kamakura(8文字)をHayama(6文字)に置換
  2. Hayamaが6文字しかないため、Kamakuraのうち先頭から6文字分だけが置換される
  3. Kamakuraの残り2文字は置換されずにそのまま残る
  4. 結果Hayamaraと置換されてしまう

ちなみにサンプルが英語になりましたが、strtr()は日本語などのマルチバイト文字列をうまく処理できないようです。

文字化けしたりします。

文字列を連想配列で置換

検索する値と置換後の値を連想配列で、ひとまとめにすることもできます。

lets go to Hayama

KamakuraHayamaに置換されていますね。

 

文字列を連想配列で置換するときの構文は以下のとおりです。

strtr(対象の文字列, 検索する値 => 置換後の値)

第二引数に連想配列を設定しています。

連想配列のキーが検索する値で、配列の値が置換後の値となります。

連想配列のキーの文字数が長い順に置換していきます。

しかも、先ほどの誤った置換でもご紹介した、文字数が違う場合でもキチンと置換されていますね。

 

普段はstr_replace()を使うことが多いかと思いますが、strtr()も知っておくと良いでしょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*