我想知道是否可以进行phpstorm更改/转换
$arr[0][0][0] = 0;
$arr[0][0][1] = 1;
$arr[0][1][0] = 2;
$arr[0][1][1] = 3;
$arr[1][0][0] = 4;
到
$arr = [0 => [0 => [0 => 0,
1 => 1]
1 => [0 => 2,
1 => 3]],
1 => [0 => [0 => 4]]];
和/或反过来。
我只找到了在array(...)
和[...]
之间切换的功能
也许有一个插件或其他我可以执行一个小脚本来执行此操作?
即使这样我也找不到。但也许我错过了一些东西。
编辑也许可以多次使用正则表达式。
答案 0 :(得分:0)
正如@LazyOne所评论的那样接缝是不可能的。
但是我找到了使用正则表达式查找和解决方法的解决方法替换功能:
将数组分组,除了最后一个索引之外的索引。
// Group 1 (0,0)
$arr[0][0][0] = 0;
$arr[0][0][1] = 1;
$arr[0][0][2] = 'test';
// Group 2 (0,1)
$arr[0][1][0] = 2;
$arr[0][1][1] = 3;
// Group 3 (1,0)
$arr[1][0][0] = 4;
启动数组:对于每个组,将{strong>第一个匹配(\$.+)\[(.+)\]\s*=\s*([\s\S]+?);
替换为$1 = [$2 => $3];
。你得到了
// Group 1 (0,0)
$arr[0][0] = [0 => 0]; // <- Array started
$arr[0][0][1] = 1;
$arr[0][0][2] = 'test';
// Group 2 (0,1)
$arr[0][1] = [0 => 2]; // <- Array started
$arr[0][1][1] = 3;
// Group 3 (1,0)
$arr[1][0] = [0 => 4]; // <- Array started
附加到数组:替换所有匹配的
(\$.+)\s*=\s*\[([\s\S]*?)\];\s*\1\[(.+?)\]\s*=\s*([\s\S]+?);
按$1 = [$2,\n$3 => $4];
。
通过这种方式你得到
// Group 1 (0,0)
$arr[0][0] = [0 => 0,
1 => 1]; // <- Index appended
$arr[0][0][2] = 'test';
// Group 2 (0,1)
$arr[0][1] = [0 => 2,
1 => 3]; // <- Index appended
// Group 3 (1,0)
$arr[1][0] = [0 => 4];
重复步骤3,直到没有匹配为止。
// Group 1 (0,0)
$arr[0][0] = [0 => 0,
1 => 1,
2 => 'test']; // <- Index appended
// Group 2 (0,1)
$arr[0][1] = [0 => 2,
1 => 3];
// Group 3 (1,0)
$arr[1][0] = [0 => 4];
重复步骤1到4,直到得到结果(您必须自己进行缩进或让phpstorm通过重新格式化代码为您执行此操作)
$arr = [0 => [0 => [0 => 0,
1 => 1,
2 => 'test'],
1 => [0 => 2,
1 => 3]],
1 => [0 => [0 => 4]]];
只有在必须转换一个非常大的数组时,这才是实用的。
注意:必须删除示例中的注释。
有趣的事实这也适用于支持regex find&amp; amp;的其他编辑器或IDE。取代