gpt4 book ai didi

php - 如何访问 preg_replace_callback 中的变量?

转载 作者:IT王子 更新时间:2023-10-29 00:07:54 26 4
gpt4 key购买 nike

我正在尝试用传递的数组中的值替换 $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;
}

更新:

我已经尝试过 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====

最佳答案

因为你的回调函数是一个闭包,你可以通过use

传递额外的参数
function ($match) use ($kvPairs) {
...
}

总比污染全局空间好

关于php - 如何访问 preg_replace_callback 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com