Я знаю, что я могу напечатать массив, используя функцию 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. он записывает его как дамп данных, который трудно читать.
Как я могу красиво распечатать содержимое массива для легкого чтения
Я нашел 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)));
Попробуйте следующий код. Я не знаю, как заголовок $this-> работает внутри вашего webapp. Но предполагая его массив. в следующем примере работает файл для одиночного массива.
$text="";
$file = fopen('test.log', 'a+');
foreach($this->header as $key=>$val)
{
$text.="$key=>$val \n\r";
}
fwrite($file, $text);
fclose($file);
Вы можете использовать управление выходом.
ob_start();
print_r($array);
$content = ob_get_clean();
$file = fopen('test.log', 'a+');
fwrite($file, $content . PHP_EOL);
fclose($file);
newline
и первым буквенно-цифровым символом\t
(табулятор). Это должно создать хорошие отступы.