【问题标题】:php array( ) key without quotesphp array() 键不带引号
【发布时间】:2016-12-23 16:29:58
【问题描述】:

我有一个项目,其中包含许多不带引号的 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"
);

如何使用正则表达式为数组键添加引号?

这个项目有数千个 php 文件。任何人都经历过这一点,您建议搜索和替换所有 php 文件。谢谢。

【问题讨论】:

  • 显示该代码的一些实际片段(不带引号的键)
  • 你是怎么开始有成千上万个无效文件的?!?
  • 你为什么要改变它?
  • @Dagon 当error_reporting 值设置为隐藏通知及以上很长时间时会发生这种情况。当我解除这个设置时,我处理了这种事情。我想OP也有类似的情况

标签: php arrays key quotes


【解决方案1】:

您应该使用支持使用正则表达式查找和替换选项的文本编辑器。

参考这个:How to fix associative array keys that lack single quotation marks in multiple files

【讨论】:

  • 看起来这个答案只修复了 $ary[name] = "Smith" ; 的东西,但没有修复其他变体
【解决方案2】:

您将需要两个带有查找/替换的正则表达式通道

替换$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) - 只需检查其中的“搜索”菜单。确保您正在修改的文件处于版本控制之下,以便您可以回滚任何您不想要的更改。

此外,如果您的键可能包含下划线,请在两个正则表达式中使用 [a-zA-Z0-9_] 而不是 [a-zA-Z0-9]

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 2019-09-26
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多