【问题标题】:Can't get preg_replace_callback function working无法使 preg_replace_callback 函数工作
【发布时间】:2014-02-02 17:01:58
【问题描述】:

如果您发现任何错误,它将无法正常工作..

function replaceLink($matches){
    $final = '<img src=\''.$path[$matches[1]].'\' alt=\''.$data['alt'].'\'/>';
    return $final;
}
$message = preg_replace_callback('#\[img\]([1-3])\[/img\]#isU', 'replaceLink', $message);

如何使用在函数外部声明的变量?

【问题讨论】:

  • 不行吗?还是不能正常工作? $message 的值是多少?
  • 如果您可以提供指向 jsfiddle 或类似问题的链接,您将更有可能获得帮助。

标签: php preg-replace-callback


【解决方案1】:

你不是在传递函数,你是在传递一个字符串:

$message = preg_replace_callback('...', 'replaceLink', $message);

应该是这样的:

$message = preg_replace_callback('...', replaceLink, $message);

【讨论】:

    【解决方案2】:

    这样调用函数

    $message = preg_replace_callback('#\[img\]([1-3])\[/img\]#isU', 'replaceLink', $message);
    

    没问题。并且应该可以工作。

    但我在你的函数replaceLink()中看到了这一点

    function replaceLink($matches){
        $final = '<img src=\''.$path[$matches[1]].'\' alt=\''.$data['alt'].'\'/>';
        return $final;
    }
    

    您使用未在该函数 $path$data 中定义的变量。 如果它们是在函数外部定义的并且它们不是全局的,那么它们将在 replaceLink() 内为空,你应该得到错误。

    尝试使用此代码

    $message = preg_replace_callback( 
        '#\[img\]([1-3])\[/img\]#isU', 
        function($matches) use ($path, $data) {
             $final = '<img src=\''.$path[$matches[1]].'\' alt=\''.$data['alt'].'\'/>';
             return $final;
        }, 
        $message 
    ); 
    

    【讨论】:

    • 我用的是外部变量,没错,我怎么用?
    • 能否提供定义$path$data 的代码?
    • 我终于发现我必须将 Global $path, $data 放入我的函数中!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多