0

好的,我确实有这个小助手功能

public static function toJSON($arr){
        $json = json_encode($arr);
        return preg_replace_callback('/(?<=:)"function((?:(?!}").)*}"/',
                                    function($string){
                                        return str_replace(array('\"','/','"','n','t'),array('"','/','"','',''),substr($string[0],1,-1));
                                     },$json);
    }

现在我在那里所做的是我为 preg_replace_callback() 函数的回调创建了一个匿名函数,如果我错过了一个括号,我已经检查了 3 次,但我的 IDE(zend studio)似乎没有显示任何未闭合的括号。

我的错误是这个

preg_replace_callback() 编译失败:在偏移量 30 (X:\xampp\htdocs\aya\protected\xxx\xxxArray.php:180 处丢失)

我哪里错了?

注意:这个小辅助函数的目的是让我在我的 json 输出中创建匿名函数。如果您可以向我推荐一个更好的脚本,那对我来说将是一个很大的帮助..

4

2 回答 2

1

有一个不闭合的括号

'/(?<=:)"function((?:(?!}").)*}"/'

编辑器不会发现它,因为它不会验证字符串中的内容。

于 2012-07-19T02:48:13.960 回答
1

我很确定原作者的意思是:

'/(?<=:)"function((?:(?!}").)*})"/'
                               ^

如果您想稍后捕获函数体(带有参数)以进行替换,但是替换函数稍后会使用0索引(整个匹配),因此您也可以删除第一个(

'/(?<=:)"function(?:(?!}").)*}"/'
                 ^
                 +-- a "(" deleted

这也将起作用(也会消耗更少的内存)。

于 2013-11-09T21:33:22.667 回答