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().

Edit:

Мой плохо, я думал о другом таким образом, что вы могли бы сделать это. Для этого потребуется использовать 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); 
Смежные вопросы