使用不带引号的数组键,如何在大项目中修复它?

Using arrays keys without quotes, how to fix it on big project?

我开始了一个项目,使用了很多不带引号的数组键。

现在我用这个方法有问题,当我开始我的项目时我不知道它很糟糕。由于某些原因,我最终想显示 E_NOTICES 错误,但它崩溃了,因为日志超载了数百万条通知,例如 PHP Notice: Use of undefined constant message - assumed 'key'

所以要修复它,我可以在我的整个项目中为我的键添加引号,但是有太多了!有没有办法通过算法或任何修复我的代码的方法来实现这一点?我想用带引号的字符串替换任何未定义的常量,例如: $my_array[key] 来自 $my_array['key']

谢谢。

编辑: 我成功地使用 rejex 修复了所有声明,如下所示:

\[([^0-9$\'\"\]])([^\'\"\]]*)\]\[\'\'\]

但这还不够,很多情况下使用不带括号的不带引号的键,EG:

array_key_exists(unquotedKey,$array)

$array['key'] = array( unquotedKey => array(96,56) );

等...

我可以使用正则表达式解决所有情况,但我想我会遇到很多麻烦才能很好地处理它,有时我的数组的键实际上是常量,不应该被引用!如果有人有更好的解决方案,那将对我有很大帮助。

完美的解决方案是在 PHP 用带引号的字符串 替换未定义常量后能够 获取我的代码,这可能吗?每次我编译它都会这样做,它可能会暂时存储在某个地方。

我使用 Notepad++,它具有在文件中搜索和替换的功能 (Ctrl + Shift + F)。打开正则表达式模式,您可以使用

搜索:

$my_array\[([^\'\"]+)\]

替换

$my_array\[\'\'\]

搜索在数组键方括号内查找任何不存在 "' 字符的内容,这表明声明已经有效。

Select 你项目的目录然后点击 "Replace in Files"。确保首先备份您的整个项目,以防出现问题。

使用这个模式

[a-zA-Z0-9]{1,}(\[([^'"[=10=]-9]+)\])

查找不带引号的数组键,如下所示:

$_POST[content_id]