Я пытаюсь заменить {{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; ... }