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