Может ли распечатать форматированный массив в файл, используя php?

1

Я знаю, что я могу напечатать массив, используя функцию print_r() в PHP, как это

print_r($array);

И чтобы он выглядел красиво в браузере, я могу обернуть его блоком HTML <pre> как это

echo '<pre>';
print_r($array);
echo '</pre>';

Но как я могу написать второй хороший вывод в файл не в браузер с помощью HTML?

Вот что я пробовал

$file = fopen('test.log', 'a+');
fwrite($file, print_r($this->header, TRUE) . PHP_EOL);
fclose($file);

Но это не записывает содержимое массива в файл test.log. он записывает его как дамп данных, который трудно читать.

Как я могу красиво распечатать содержимое массива для легкого чтения

  • 1
    Вы пытались использовать foreach?
  • 1
    Замените каждый пробел между newline и первым буквенно-цифровым символом \t (табулятор). Это должно создать хорошие отступы.
Теги:
arrays
fopen
fwrite

3 ответа

2

Я нашел 2 способа сделать это. первый, кредит принадлежит М. Хайрулу Исламу

этот метод будет использовать foreach для записи содержимого массива в файл

private function fwriteArray($result, $file){

    if( !is_array($result) && !is_object($result)) {    
            return false;
    }

    foreach($result as $k => $v){
        if(is_array($v) || is_object($v) ){

            $this->fwriteArray($v, $file);

        } else {
            fwrite($file, '    [' . $k.'] => ' .  $v . PHP_EOL);
        }
    }
}

Второй способ - преобразовать массив в строку json и использовать JSON_PRETTY_PRINT для правильной печати данных

fwrite($file, PHP_EOL . str_replace("\n", PHP_EOL, json_encode( $myArray, JSON_PRETTY_PRINT)));
0

Попробуйте следующий код. Я не знаю, как заголовок $this-> работает внутри вашего webapp. Но предполагая его массив. в следующем примере работает файл для одиночного массива.

 $text="";
 $file = fopen('test.log', 'a+');
 foreach($this->header as $key=>$val)
  {
  $text.="$key=>$val \n\r";
  }
fwrite($file, $text);
fclose($file);
  • 0
    Я не буду форматировать это красиво, что является ключевой проблемой для автора.
0

Вы можете использовать управление выходом.

ob_start();
print_r($array);
$content = ob_get_clean();

$file = fopen('test.log', 'a+');
fwrite($file, $content . PHP_EOL);
fclose($file);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню