当前位置: 首页 > 知识库问答 >
问题:

preg_replace_callback():要求参数2“Array”是有效的回调

洪飞扬
2023-03-14

此代码返回一个错误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?

谢谢

共有2个答案

景品
2023-03-14

你可以用这个

<?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
);
?>

如果找到匹配项,将返回新的主题,否则将原封不动地返回主题。

罗祺
2023-03-14

可悲的是preg_replace_callback不允许您作为数组提供回调(如str_replace(数组,数组,$s)ie),所以您必须迭代回调并在那里进行函数调用

$result = $s;
foreach ($tCallback as $key=>$callback) {
    $result = preg_replace_callback($tPattern[$key], $tCallback[$key], $result);
}
return $result;

如果您正在运行PHP7,则可以使用Misyaath Mohammed建议的preg\u replace\u callback()array\u combine()

$patterns_and_callbacks = array_combine($tPattern, $tCallback);
return preg_replace_callback_array($patterns_and_callbacks, $s);
 类似资料:
  • 我正在使用wordpress插件Ultimate Membership Pro。我的代码中有一个小警告。我想不出问题出在哪里。 我试图检查PHP手册,也做这个主题的研究,但不能解决它。有人知道怎么解决吗?只需要一个提示。 Php代码: 原始代码: 错误: 警告:preg_replace():不再支持 /e修饰符,请在第44行的 /var/www/html/stock-market/wp-conte

  • 设置一个应该在图像上放置广告的应用程序时,我在运行代码时遇到了这个WordPress错误,这是一个令人沮丧的星期试图修复这个问题。 我希望它能工作,但它给了我以下错误:警告:preg_replace_callback():需要参数2,' 如果有人能想出一个解决方案,那将是惊人的,非常感谢!

  • 我刚刚更新了PHP在我的服务器从PHP 5到PHP 7,我得到了这些警告: 警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2“chr(\1)”是有效的回调 警告:preg\u replace\u callback() 警告:preg_replace_callback()[function.preg-replace-c

  • 当试图向会话添加数据(并检查它是否已经存在)时,我会收到以下警告。 警告:in_array()要求参数2为数组,给定null 我怎样才能解决这个问题? 它所指的代码: 我只有在清洁的浏览器上添加第一个产品时才会收到此警告。当我删除它并添加另一个产品时,警告就消失了。同样,如果我添加第二个产品。

  • 问题内容: 我已经看过以下SO问题,即使用AngularJS的$http服务通过GET请求发送数组,以及通过Angular $ http POST传递数据数组。但是那里建议的解决方案似乎对我不起作用。我的专门针对 数组对象 。 我有以下带有数组参数的AngularJS ajax调用 该调用生成的网址似乎不适用于我。我已经尝试了各种参数的化身,并且生成的网址(通过提琴手将其获取)如下。 我希望网址为

  • 问题内容: 我收到此错误: 这是什么意思? 这是我的代码: 我究竟做错了什么? 按提交按钮后出现此错误。 问题答案: 在您的aspx文件中,您应该这样放置第一行: 如果您已经有类似的东西, 那么只需添加其余的=> 我建议不要这样做。