PHP Preg Заменить замещающий массив
Итак, я пытаюсь сделать что-то вроде этого:
preg_replace("/\{([a-zA-Z0-9_]+)\}/", $templateVariables[$1], $templateString);
Теперь я знаю, что это невозможно, но я хотел бы знать, есть ли способ сделать это, потому что я попытался использовать create_function, однако $ templateVariables является локальной переменной для функции, в которой он находится, поэтому Я не могу получить доступ к $ templateVariables из create_function, поэтому я застрял здесь. Я бы предпочел не искать спички, чтобы выяснить, чем их заменить, а затем найти их снова, чтобы заменить, что просто ужасно неэффективно. Так или иначе, я могу получить локальную переменную из анонимной функции, или у кого-нибудь есть хорошие предложения.
Благодарю.
3 ответа
Попробуй это:
$vars = array(
"test" => "Merry Christmas",
);
$string = "test {test} test";
$string = preg_replace_callback("/\{([a-zA-Z0-9_]+)\}/", function($match) use ($vars) {
return isset($vars[$match[1]]) ? $vars[$match[1]] : $match[0];
}, $string);
echo $string;
Это должно вывести:
тест с Рождеством
Вы можете увидеть рабочий пример здесь http://codepad.viper-7.com/2ZNNYZ
Вам необходимо использовать модификатор e regexp:
preg_replace("/\{([a-zA-Z0-9_]+)\}/e", "\$templateVariables['\\1']", $templateString);
На самом деле вы можете использовать preg_replace с модификатором /e:
preg_replace("/\{([a-zA-Z0-9_]+)\}/e", '$templateVariables[\'$1\']', $templateString)
Но это может быть не самый безопасный путь здесь...