【问题标题】:Can a print a formated array to a file using php?可以使用 php 将格式化的数组打印到文件中吗?
【发布时间】:2015-08-27 16:33:06
【问题描述】:

我知道我可以像这样在 PHP 中使用 print_r() 函数打印一个数组

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 文件。它把它写成一个难以阅读的数据转储。

我怎样才能很好地打印数组内容以便于阅读

【问题讨论】:

  • 你试过使用foreach吗?
  • newline 和第一个字母数字字符之间的每个空格替换为\t(制表符)。这应该会产生很好的缩进。

标签: php arrays fopen fwrite


【解决方案1】:

我找到了两种方法来做到这一点。第一个,归功于 Md. Khairul Islam

此方法将使用 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)));

【讨论】:

    【解决方案2】:

    试试下面的代码。我不知道 $this->header 在您的 web 应用程序中的作用。但假设它是一个数组。以下示例适用于单个数组的文件。

     $text="";
     $file = fopen('test.log', 'a+');
     foreach($this->header as $key=>$val)
      {
      $text.="$key=>$val \n\r";
      }
    fwrite($file, $text);
    fclose($file);
    

    【讨论】:

    • 我不会很好地格式化它,这是作者的关键问题。
    【解决方案3】:

    您可以使用output control

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多