php array()键没有引号

时间:2016-08-17 06:25:15

标签: php arrays key quotes

我有一个包含许多不带引号的array()键的项目

$ary = array( name => "Smith" );

用引号转换其键的任何方法?

$ary = array( 'name' => "Smith" );

我知道像

这样的代码
$ary[name] = "Smith" ; // can change to $ary['name'] using editor with regexp

但问题是如果以这种方式编码

$ary = array( name => "Smith" );

// or worse

$ary = array(
    name => "Smith",
    class => "2A"
);

如何使用regexp为数组键添加引号?

这个项目有数以千计的php文件。任何机构都有这方面的经验,你建议搜索和替换所有的PHP文件。谢谢。

2 个答案:

答案 0 :(得分:2)

您应该使用支持使用REGEX查找和替换选项的文本编辑器。

请参阅:How to fix associative array keys that lack single quotation marks in multiple files

答案 1 :(得分:0)

您需要使用find / replace

进行两次正则表达式传递

替换$ary[name] = "Smith"的第一个列出了here

  

匹配:(\$[a-zA-Z0-9]+\[)([^\]]+)\]

     

替换:\1'\2']

https://regex101.com/r/aJ3cN9/1

第二个针对name => "Smith"案例:

  

匹配:([a-zA-Z0-9]+)\s*=>

     

替换:'\1' =>

https://regex101.com/r/wH9cC5/1

要批量替换它,你可以使用vim作为described here,任何成熟的PHP IDE,如NuSphere或PhpStorm或许多文本编辑器(Notepad ++或SublimeText) - 只需检查菜单"搜索"在他们中。确保您要修改的文件位于版本控制之下,以便您可以回滚任何您不想要的更改。

此外,如果您的密钥可能包含下划线,则在两个regexp中都使用[a-zA-Z0-9_]而不是[a-zA-Z0-9]