PHP Preg Заменить замещающий массив - PullRequest
3 голосов
/ 23 декабря 2011

Хорошо, поэтому я пытаюсь сделать что-то вроде этого:

preg_replace("/\{([a-zA-Z0-9_]+)\}/", $templateVariables[$1], $templateString);

Теперь я знаю, что это невозможно, как есть, однако я хотел бы знать, есть ли способ сделать это, потому что я попытался использовать create_function, однако $ templateVariables является локальной переменной для функции внутри, поэтому я не могу получить доступ к $ templateVariables из create_function, поэтому я застрял здесь. Я бы предпочел не искать спички, чтобы выяснить, чем их заменить, а потом найти их снова, чтобы заменить, что кажется ужасно неэффективным. Так что, в любом случае, я могу получить локальную переменную из анонимной функции, или у кого-нибудь есть хорошие предложения.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 23 декабря 2011

Попробуйте это:

$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

0 голосов
/ 23 декабря 2011

Вам необходимо использовать модификатор e regexp:

preg_replace("/\{([a-zA-Z0-9_]+)\}/e", "\$templateVariables['\\1']", $templateString);
0 голосов
/ 23 декабря 2011

На самом деле вы можете использовать preg_replace с модификатором / e:

preg_replace("/\{([a-zA-Z0-9_]+)\}/e", '$templateVariables[\'$1\']', $templateString)

Но это может быть не самый безопасный способ здесь ...

...