preg_replace
の一致パターンを置換値配列のインデックスとして使用する簡単な方法があるかどうかを知りたいと思います。preg_replaceパターンを置換データ配列のインデックスとして使用
xxxはパターンである
preg_replace("/\{[a-z_]*\}/i", "{$data_array[\1]}", $string);
{XXX}を検索し、$ data_arrayの値に置き換え[ '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);
}
'preg_replace_callback()'を使用してください – HamZa
この場合(入力データをフィルタリング済みです)、 '/ e'修飾子を使用することができます(あなたのcurly文字列式には配列キー引用符が必要です)。しかし、これは今では禁止されており、 'p_r_callback'よりも利点が限られています。キャプチャグループ '/ \ {([a-z _] *)\}/i'に対してもパラテーシスが必要であることに注意してください。 – mario
乾杯HamZa。私はpreg_replace_callback()について知っていましたが、データ配列を渡す方法が不明でした。 (質問で) – Waygood