使用phpstorm更改/转换数组代码

时间:2014-08-15 20:57:44

标签: php arrays phpstorm

我想知道是否可以进行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(...)[...]之间切换的功能 也许有一个插件或其他我可以执行一个小脚本来执行此操作? 即使这样我也找不到。但也许我错过了一些东西。

编辑也许可以多次使用正则表达式。

1 个答案:

答案 0 :(得分:0)

正如@LazyOne所评论的那样接缝是不可能的。

但是我找到了使用正则表达式查找和解决方法的解决方法替换功能:

  1. 将数组分组,除了最后一个索引之外的索引。

    // 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;
    
  2. 启动数组:对于每个组,将{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
    
  3. 附加到数组:替换所有匹配的
    (\$.+)\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];
    
  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];
    
  5. 重复步骤1到4,直到得到结果(您必须自己进行缩进或让phpstorm通过重新格式化代码为您执行此操作)

    $arr = [0 => [0 => [0 => 0,
                        1 => 1,
                        2 => 'test'],
                  1 => [0 => 2,
                        1 => 3]],
            1 => [0 => [0 => 4]]];
    
  6. 只有在必须转换一个非常大的数组时,这才是实用的。

    注意:必须删除示例中的注释。

    有趣的事实这也适用于支持regex find&amp; amp;的其他编辑器或IDE。取代