$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
スコープの事を試してみたが、それはどちらか動作しません。 preg_replace_callback
の内側と外側の2つのprint文を追加しました。
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){ ... } ' –