$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 장의 print 서술문을 추가하여 무엇이 수행되고 있는지를 확인했습니다. 하나는 내부이고 다른 하나는 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
콜백 내에서'$ kvPairs'를 조작해야한다면 다음과 같이 ___by reference___를 전달하면됩니다 : function ($ match) use (& $ kvPairs) { ... }'' –