文字列を置換
PHPには文字列の置換をする関数が用意されています。
このサンプルでは次の関数について見てみます。
str_replace
str_ireplace
strtr
substr_replace
「str_replace」について
7行目を見てください。
「今日はプログラム」という文字列から「今日は」という文字列を探し、見つかったら「明日も」という文字列に置き換えています。
この「str_replace」関数は大文字小文字を区別するため、一致しないと置換をしてくれません。
そのため、12行目のように「Today」と「today」は別物とみなすため、置換をしません。
「str_ireplace」について
この関数は大文字小文字を区別しないで置換をしてくれます。
「str_replace」の拡張版といったところですね。
24行目の実行結果を見ていただいて確認していただける通り、「Today」と「today」を同一とみなし、「tomorrow」に変換しています。
「strtr」について
置換対象文字列の中から変換したい文字列を探します。見つかったら置換したい文字列に置き換えます。
この「strtr」関数は大文字小文字を区別します。
34行目の実行結果を確認したただけると「cd」と「CD」は小文字と大文字であるため違う文字列とみなし、置換をしません。
また、このサンプル上では記述しませんでしたが、第2引数の置換する文字列と第3引数の置換したい文字列の文字数を同じにしてください。
例えば「abcde」という文字列を置換するとします。
$result = strtr($data, "cd", "123");
※第2引数の文字数 > 第3引数の文字数のケース
上記のように実行すると結果が「ab12e」となります。
これは置換したい文字数の最大が2文字であるためです。
また次のように第2引数の文字数が大きい場合も実行結果が異なってきます。
$result = strtr($data, "cd", "1");
※第2引数の文字数 < 第3引数の文字数のケース
上記のように実行すると結果が「ab1de」となります。
イメージとしては第2引数の文字数が大きいため不足分は変換しないという結果です。
このことを理解したうえで使用するようにしてください。
「substr_replace」について
指定した文字列の何番目から何個分を置換するか?
というのが「substr_replace」関数です。
第2引数の開始位置は0(ゼロ)から始まります。
第3引数は省略可能です。第3引数を省略すると開始位置から全てが置換対象となります。
サンプルでは3個の例を取りあげています。
41行目では10文字目(0から始まるので引数を9とします)から4個分を置き換えています。「rain」を「snow」に置き換えていることになります。
46行目では最初にある「mouse」を「cat」に置き換えている例です。
第3引数の何文字分?を「strlen」で指定していますが、必要に応じて「mb_strlen」を使う必要もあります。
※ここでは半角英数を対象にしているため。
そして第3引数を省略した例が51行目です。
この例は置換対象文字列の中から7文字目(0から始まるので6)以降を置き換える処理となります。
|
|