単純な文字列置換のスマートな書き方
2日連続でPHPネタといきたいtanakaです。
さて、PHPで文字列置換といえば、簡単なものはstr_replace()、複雑なものは正規表現の関数を使って処理するのがよくある方法だと思います。
今日は割とよく使われていると思われるstr_replace()と連想配列を組み合わせて、スマートに文字列置換を実装するイディオムの紹介です。
str_replace_test.php
<?php
$original_text = "夏が暑いぜ";
print "原文:{$original_text}<br />";
$replace_rule = array(
"夏" => "summer",
"暑い" => "hotだ"
);
$convert_text = str_replace(
array_keys($replace_rule),
array_values($replace_rule),
$original_text);
print "変換後:{$convert_text}<br />";
?>
出力結果
原文:夏が暑いぜ
変換後:summerがhotだぜ
str_replace関数は第一引数と第二引数に文字列を指定する以外にも配列を指定することができます。第一引数の0番目の文字列がヒットしたら、第二引数の0番目の文字列に置換されるという具合です。
通常は、検索する文字列と、置換後の文字列を別々の配列にいれますが、ここではまず$replace_ruleに検索する文字列をキーに、変換後の文字列を値に指定した、連想配列を定義します。んで、str_replaceの中でキーと値をそれぞれ配列として取り出してあげれば、ちゃんと変換してくれるというわけです。
変換ルールが、一対一で対応していてまとまっているのが、この書き方のメリットです。変換する文字列が増えれば、それぞれの配列リテラルを別に定義するのはきついはずです。