「文字列中に含まれるローマ字をDB上のものと照合して漢字に変換したい」と考えてコードを書きました。他に例が見当たらなかったので上げておきます。
ローマ字を変換しているといっても、文字列から取得していうるのは英字なので、DBの処理の箇所を別の処理に変更すれば他の使い方もできそうです。また、正規表現の箇所を変えれば他の応用もできると思います。
<?php
require_once("dsn.php");
function romajiConvert($str) {
// 文字列内に英字が含まれる場合
if (preg_match("/[a-zA-Z]+/", $str)) {
// 文字列内に含まれる英字を取り出す
preg_match_all("/[a-zA-Z]+/", $str, $out, PREG_PATTERN_ORDER);
$alphabet = $out[0];
$replace = array(); // 置換用配列
foreach ($alphabet as $az) {
// ここからDBの処理
// DBの地名ローマ字データと照合し、漢字に変換する
// e.g. Tokyo -> 東京都
global $dsn;
$db = new PDO($dsn['host'], $dsn['user'], $dsn['pass']);
$db->exec('SET NAMES utf8');
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$sql = "SELECT kanji FROM romaji_convert "
. "WHERE LOWER(hebon)=LOWER(:romaji) OR LOWER(kunrei)=LOWER(:romaji)";
$stt = $db->prepare($sql);
$stt->bindValue(":romaji", $az, PDO::PARAM_STR);
$stt->execute();
$response = $stt->fetch();
// DBにデータがあった場合はそれを、なかった場合は元の値を入れる
// (str_replaceで使うため)
if (!empty($response['kanji'])) {
$replace[] = $response['kanji'];
} else {
$replace[] = $az;
}
}
// str_replace($search, $replace, $subject)
// において、$search と $replace が配列の場合は順に置換が行われる
// http://php.net/manual/ja/function.str-replace.php
// e.g.
// $subject = "nya wan chun";
// $search = ["nya", "chun"];
// $replace = ["にゃ", "ことりちゃん!"];
// $out = str_replace($search, $replace, $subject);
// echo $out;
// --- 出力結果 ---
// "にゃ wan ことりちゃん!"
$str = str_replace($alphabet, $replace, $str);
}
return $str;
}
?>