php - preg_replace_callback() : Requires argument 2, 'Array' ,作为有效的回调

标签 php

此代码返回错误 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 suggestedarray_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/

相关文章:

php - 我如何将文本从textarea发布到mysql数据库

php - 第 6 行的 fatal error : Call to a member function get() on a non-object in C:\wamp\www\ci\application\models\site_model. php

javascript - Google reCAPTCHA 重置由函数调用呈现的多个验证码

php - MySQL:您可以根据第三个表中的字段值来选择要选择的表吗?

PHP Cookie 不起作用

javascript - 使用 javascript 或 php 删除脚本标签

nginx <=> php-fpm : unix socket gives error, tcp 连接很慢

php - 使用 PHP(sqlsrv 扩展)将 MSSQL 日期时间打印到 html 时出现问题

java - 如何使用 Java 解析 php 消息 - HTTP 格式不正确的问题

php - CodeIgniter:如何从 View 获取输入并在 Controller 中使用它