>此代码返回错误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,你可以按照 Misyaath Mohammed 的建议preg_replace_callback()
与array_combine()
$patterns_and_callbacks = array_combine($tPattern, $tCallback);
return preg_replace_callback_array($patterns_and_callbacks, $s);
你可以
使用这个
<?php
$subject = 'Aaaaaa Bbb';
preg_replace_callback_array(
[
'~[a]+~i' => function ($match) {
echo strlen($match[0]), ' matches for "a" found', PHP_EOL;
},
'~[b]+~i' => function ($match) {
echo strlen($match[0]), ' matches for "b" found', PHP_EOL;
}
],
$subject
);
?>
如果找到匹配项,将返回新主题,否则主题将保持不变。