将preg_replace转换为preg_replace_callback

时间:2014-02-04 02:32:46

标签: php

我需要帮助将preg_replace转换为preg_replace_callback。

PHP 5.4及以上版本触发以下声明: The /e modifier is deprecated, use preg_replace_callback instead in

我尝试过改变:

if (stripos ( $tpl->copy_template, "[category=" ) !== false) {
    $tpl->copy_template = preg_replace ( "#\\[category=(.+?)\\](.*?)\[/category\\]#ies",         "check_category('\\1', '\\2', '{$category_id}')", $tpl->copy_template );
}

if (stripos ( $tpl->copy_template, "[category=" ) !== false) {
    $tpl->copy_template = preg_replace_callback ( "#\\[category=(.+?)\\](.*?)\\[/category\\]#isu", 
        function($cat){
            return check_category($cat['1'], $cat['2'], $category_id);
        }
    , $tpl->copy_template );
}

回报为空

1 个答案:

答案 0 :(得分:2)

由于$category_id是全局变量,因此您必须在具有global关键字的函数内使用它。并且数值数组的键是整数而不是字符串;所以你必须写$cat[1]而不是$cat['1']$cat[2]而不是$cat['2']

通过这些微小的改动,你的功能变为:

function($cat){
        global $category_id;
        return check_category($cat[1], $cat[2], $category_id);
}