【发布时间】:2018-11-15 13:48:23
【问题描述】:
我想替换源代码中所有未引用的数组键:
$array[keyValue]
带引号的数组键:
$array['keyValue']
对于一维数组,这个正则表达式允许我这样做:
preg_replace('/\$([a-z-_0-9]+)(\[([a-z][a-zA-Z-_0-9]+)\])+/', '\$$1['$3']', $input_lines);
测试:https://www.phpliveregex.com/p/pXc
注意我所有的键都以小写字母开头。
当我有多维数组并且我想更改时,我的问题就出现了:
$array[keyValue1][keyValue2]
到:
$array['keyValue1']['keyValue2']
甚至
$array[keyValue1]...[keyValueN]
到
$array['keyValue1']...['keyValueN']
对于更大的维度数组。我多次匹配该模式的任何尝试最终都会在第一个左括号 [ 和最后一个 ] 之间进行匹配。
编辑:这样做的原因是为了避免这样的错误和通知
E_NOTICE : type 8 -- Use of undefined constant key - assumed 'key' -- at line 2
在我的日志中
【问题讨论】:
-
您知道从技术上讲
$array[keyValue1]不应该存在吗?键应该是一个字符串。所以你想要一个刺痛引用自己?所以下次在您的代码中,您将需要解决像$array['\'keyValue1\'']这样的元素? ideone.com/uFXrqV -
我只是想知道谁赞成这个奇怪的问题?任何意见为什么这对你们来说很有趣?
-
不是我。我只是为了好玩而检查了代码。看到两个警告并在
var_dump(array(myKey => array(myValue => 0)));上获得了array (size=1) 'myKey' => array (size=1) 'myValue' => int 0 -
@Alex 是什么让你觉得它奇怪?
-
@revo 检查我的第一条评论。我什至花了一些时间来举例说明——请点击评论中的链接