preg_replace
一致したパターンを置換値配列のインデックスとして使用する簡単な方法があるかどうかを知りたいです。
例えば
preg_replace("/\{[a-z_]*\}/i", "{$data_array[\1]}", $string);
{xxx} を検索し、$data_array['xxx'] の値に置き換えます。xxx はパターンです。
しかし、この式は無効な php として機能しません。
以下の関数を書いたのですが、簡単にできるのか知りたいです。コールバックを使用することもできますが、$data_array をコールバックに渡すにはどうすればよいでしょうか?
function mailmerge($string, $data_array, $tags='{}')
{
$tag_start=$tags[0];
$tag_end =$tags[1];
if( (!stristr($string, $tag_start)) && (!stristr($string, $tag_end)) ) return $string;
while(list($key,$value)=each($data_array))
{
$patterns[$key]="/".preg_quote($tag_start.$key.$tag_end)."/";
}
ksort($patterns);
ksort($data_array);
return preg_replace($patterns, $data_array, $string);
}