Как получить доступ к переменной внутри preg_replace_callback?

Я пытаюсь заменить {{key}} элементы в моем $text значениями из переданного массива. но когда я попытался добавить print_r чтобы посмотреть, что происходит, у меня есть Undefined variable: kvPairs ошибка Undefined variable: kvPairs . Как я могу получить доступ к моей переменной формы в preg_replace_callback ?

 public function replaceValues($kvPairs, $text) { $text = preg_replace_callback( '/(\{{)(.*?)(\}})/', function ($match) { $attr = trim($match[2]); print_r($kvPairs[strtolower($attr)]); if (isset($kvPairs[strtolower($attr)])) { return "<span class='attr'>" . $kvPairs[strtolower($attr)] . "</span>"; } else { return "<span class='attrUnknown'>" . $attr . "</span>"; } }, $text ); return $text; } 

Обновить:

Я пробовал предмет global масштаба, но он тоже не работает. Я добавил 2 оператора печати, чтобы посмотреть, что происходит, один внутри и один за пределами preg_replace_callback .

 public function replaceValues($kvPairs, $text) { $attrTest = 'date'; print_r("--" . strtolower($attrTest) . "--" . $kvPairs[strtolower($attrTest)] . "--\n"); $text = preg_replace_callback( '/(\{{)(.*?)(\}})/', function ($match) { global $kvPairs; $attr = trim($match[2]); print_r("==" . strtolower($attr) . "==" . $kvPairs[strtolower($attr)] . "==\n"); if (isset($kvPairs[strtolower($attr)])) { return "<span class='attr'>" . $kvPairs[strtolower($attr)] . "</span>"; } else { return "<span class='attrUnknown'>" . $attr . "</span>"; } }, $text ); return $text; } 

Выход, который я получаю:

 --date--1977-05-20-- ==date==== 

Поскольку ваша функция обратного вызова является закрытием, вы можете передавать дополнительные аргументы с помощью

 function ($match) use ($kvPairs) { ... } 

лучше, чем загрязнение глобального пространства

$kvPairs работает в вашей функции обратного вызова, объявляет его глобальным

 function($match) { global $kvPairs; ... }