我试图用传递的数组中的值替换
$text
中的{{key}}
项,但是当我尝试添加print_r
以查看发生了什么时,我得到了一个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;
}
更新:
我尝试了使用全局作用域,但它也不起作用。我添加了两个打印语句来查看正在发生的情况,一个在 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====
$kvPairs
,则需要通过___引用传递___:function ($match) use (&$kvPairs) { ... }
- Mark Baker