我想创建支持PHP的网络应用程序的(临时)版本< 5.4,我需要将我的所有短数组语法转换为长数组。
有很多" old to new"脚本,但唯一"新旧"一个似乎是这个 - https://github.com/slang800/php-array-syntax-converter,但是当我尝试运行它时,它给了我以下错误:
PHP Catchable fatal error: Argument 1 passed to processTree() must be
an instance of Pharborist\TopNode, instance of Pharborist\RootNode
given
希望有人有类似的经历,可以指出我正确的方向。
感谢。
答案 0 :(得分:0)
如果我是你,我只需编写自己的脚本,因此您不必等待为您现在正在使用的脚本编写修复程序。真的不是很难找出要替换的内容,实际上:除了/\[[^]]*\]/
之外,所有出现的这种模式$var[$idx]
都是表达式的一部分(访问一个数组索引或推送到数组:$var[] =
)。
在我的头脑中,我写了一个脚本就是这样,基本上:
$pattern = '/(=>?|,|\[|\()\s*\[([^]]+)\](?!\s*=)/';
$script = file_get_contents('path/to/file.php');
$rewritten = preg_replace(
$pattern,
'$1 array($2)',
$script
);
//only AFTER you've checked the output, of course!
file_put_contents('path/to/file.php', $rewritten);
请注意,此正则表达式尚未完成:它无法处理嵌套数组,如:
$x = [ $y[1] => [1, 2, 3]];
但是Play around with it here,直到你可以让它发挥作用。使用具有不同模式的preg_match_all
,匹配包含嵌套数组的整个表达式,并替换需要单独替换的内容时,可能是值得的。这让我的生活变得更轻松,我确实认为