【问题标题】:indentation with var_dump array output带有 var_dump 数组输出的缩进
【发布时间】:2014-01-10 01:27:21
【问题描述】:

我正在自动生成一些代码并使用 var_export 以可解析格式输出数组。关于我如何让它缩进以使其与输出的其余部分匹配的任何想法

protected function getCode(){
    $rs = '            $this->add(';
    $rs .= var_export($this->getArray(),true);
    $rs .= ');'.PHP_EOL;
    return $rs;
}

我得到的输出是这样的

          $this->add(array (
  'name' => 'notes',
  'attributes' => 
  array (
    'label' => 'Date',
    'label_attributes' => 
    array (
      'class' => 'col-md-4 control-label',
    ),
  ),
));

我希望它带有正确的空白

          $this->add(array (
                       'name' => 'notes',
                       'attributes' => 
                       array (
                         'label' => 'Date',
                         'label_attributes' => 
                         array (
                           'class' => 'col-md-4 control-label',
                         ),
                       ),
                     ));

【问题讨论】:

    标签: php string-formatting var-dump


    【解决方案1】:

    使用preg_replace 这很容易:

    $array = array(
        array(
            "id" => 1,
            "foo" => "bar",
        ),
        array(
            "id" => 2,
            "foo" => "baz",
        ),
    );
    
    $str = var_export($array, true);
    $str = preg_replace("/^/m", "    ", $str);
    echo "    Indent:\n";
    echo $str;
    

    【讨论】:

    • 谢谢。这行得通。我添加了几个 preg_replace 来整理第一行和最后一行。 $rawString = preg_replace("/^[ ]{2}/m", ' ', $rawString); $rawString = preg_replace("/^[$]/m", ' $', $rawString); $rawString = preg_replace("/^[);]{3}/m", ' ));', $rawString);
    【解决方案2】:

    这很难,它会消耗你很多精力。 我认为您可以使用这种方式来获得更好的格式:

    function getCode(){
        $rs = '$data = ';
        $rs .= var_export($this->getArray() ,true) . ';' . PHP_EOL;
        $rs .= '$this->add($data);' . PHP_EOL;
        return $rs;
    }
    echo getCode($data);
    

    输出将是:

    $data = array (
      'name' => 'notes',
      'attributes' => 
      array (
        'label' => 'Date',
        'label_attributes' => 
        array (
          'class' => 'col-md-4 control-label',
        ),
      ),
    );
    $this->add($data);
    

    【讨论】:

      【解决方案3】:

      您无法定义var_dump()var_export() 在文本中放入的空格。

      更好的选择是编写一个函数,以您想要的格式打印出数组的详细信息。或者,您可以在打印文本后更改解析文本的方式,以解析 var_dump()var_export() 为您提供的内容。

      编辑:

      我的错,我想到了另一种方法可以做到这一点。它需要使用str_replace()var_dump() 使用 \n" " 输出变量进行格式化,因此您可以执行以下操作:

      echo str_replace(" ","&nbsp&nbsp&nbsp&nbsp", $this->getArray())

      您必须确定要替换 " " 的内容才能获得所需的格式,当然这将设计为在 HTML 页面上工作。这不是最简单的事情(或最漂亮的事情),但如果您不想编写自己的函数来打印您喜欢的数组,至少可以尝试一下。

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 2011-07-08
        • 1970-01-01
        • 2012-12-22
        • 2012-11-30
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 2015-04-20
        相关资源
        最近更新 更多