使用var_dump数组输出缩进

时间:2014-01-10 01:27:21

标签: php string-formatting var-dump

我自动生成一些代码并使用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',
                         ),
                       ),
                     ));

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

更好的选择是编写一个函数,以您希望的格式打印出数组的细节。或者,您可以更改打印文本后解析文本的方式,以解析var_dump()var_export()给您的内容。

编辑:

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

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

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

答案 2 :(得分:0)

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

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);