此代码返回错误 preg_replace_callback():需要参数 2“Array”作为有效的回调
$tPattern = array(
"/\\\(\d{1,3})/",
"/\\\\\(/",
"/\\\\\)/"
);
$tCallback = array(
function($m) { return chr(octdec($m[1])); },
function($m) { return '('; },
function($m) { return ')'; }
);
return preg_replace_callback($tPattern, $tCallback, $s);
我已将其替换为
$s = preg_replace_callback("/\\\(\d{1,3})/", function($m) { return chr(octdec($m[1])); }, $s);
$s = preg_replace_callback("/\\\\\(/", function($m) { return '('; }, $s);
$s = preg_replace_callback("/\\\\\)/", function($m) { return ')'; }, $s);
return $s;
但我想知道如何使用数组而不是 3 次调用 preg_replace_callback ?
谢谢
最佳答案
遗憾的是 preg_replace_callback
不允许您以数组形式提供回调(例如 str_replace(array, array, $s)
ie),因此您必须迭代回调并在那里进行函数调用
$result = $s;
foreach ($tCallback as $key=>$callback) {
$result = preg_replace_callback($tPattern[$key], $tCallback[$key], $result);
}
return $result;
如果您运行的是 PHP7,则可以使用 preg_replace_callback()
as Misyaath Mohammed suggested与 array_combine()
结合
$patterns_and_callbacks = array_combine($tPattern, $tCallback);
return preg_replace_callback_array($patterns_and_callbacks, $s);
关于php - preg_replace_callback() : Requires argument 2, 'Array' ,作为有效的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36087665/