2014-01-10 2 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);