У меня проблема с переменной из preg_replace. В основном, что я хочу достичь, это искать некоторые шаблоны в тексте и заменять их контентом. Замена выполняется в отдельной функции (retrieveValue ()). Однако мне трудно переносить переменную ('$ 1').
$types = array( array( '/\*#(.*?)#\*/', $this->retrieveValue($templateVars,'$1') ) ); foreach ($types as $type) { $template = preg_replace($type[0], $type[1], $template); }
Проблема заключается в том, что $this->retrieveValue($templateVars,'$1')
выполняется до вызова preg_replace
.
Решение. Посмотрите на preg_replace_callback
.
Я предлагаю вам создать новый метод в своем классе:
public function _replace($matches) { return $this->retrieveValue($templateVars, $matches[1]); }
и затем может использовать:
preg_replace_callback('/\*#(.*?)#\*/', array($this, '_replace'), $template);
Вы также можете использовать анонимные функции в PHP 5.3.