我試圖用$text
中的{{key}}
項替換傳遞數組中的值。但是當我嘗試添加print_r
以查看發生了什麼時,我得到了一個Undefined variable: kvPairs
錯誤。如何在preg_replace_callback
內訪問我的變量表單?如何訪問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====
我想操縱$ kvPairs進行下一場比賽,是否可能或者我需要一個全局變量嗎? – Wikunia 2014-08-26 11:33:36
如果您需要在回調中操作'$ kvPairs',那麼您可以通過參考____:'function($ match)use(&$ kvPairs){ ... } – 2014-08-26 11:36:22