2014-01-10 47 views
0

我自動生成一些代碼並使用var_export輸出可解析格式的數組。任何想法,我怎麼可能讓它縮進因此它輸出的其他部分相匹配使用var_dump數組輸出的縮進

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

回答

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; 
+0

感謝。這工作。我添加了幾個preg_replace來整理第一行和最後一行。 \t'$ rawString = preg_replace(「/^[] {2}/m」,'',$ rawString); $ rawString = preg_replace(「/^[$]/m」,'$',$ rawString); $ rawString = preg_replace(「/^[);] {3}/m」,'));',$ rawString);' – codebrent

0

您不能定義var_dump()var_export()放入文本中的空格。

更好的選擇是編寫一個函數,打印出你想要的格式的數組細節。或者,您可以在打印文本後更改解析文本的方式,以解析var_dump()var_export()爲您提供的內容。

編輯:

我的不好,我想到另一種方式,你可以做到這一點。這將需要使用str_replace()var_dump()吐出來使用格式化\n" "變量,所以你可以做線沿線的東西:

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

你必須確定你想要的" "與替換,以獲得您想要的格式是什麼,當然這將被設計爲在HTML頁面上工作。這不是最簡單的事情(或者最漂亮的),但至少你可以嘗試一下,如果你不想寫出你自己的函數來打印你喜歡的數組。

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