文件放内容与数组

时间:2009-06-27 15:45:28

标签: php

我正在使用file_put_contents($file, $data);函数将内容放入文件中,因为这些文件是在会话名称的情况下创建的, $ data 是一个多维数组,当我回应时数组打印得很好但在文件中没有内容被记录,除了数组

这个词

我应该做什么或者是否有其他自动创建文件并记录数据(数组)的功能?

谢谢。

9 个答案:

答案 0 :(得分:27)

您希望在写入时serialize()数组,并在阅读文件后unserialize()

$array = array('foo' => 'bar');
file_put_contents('foo.txt', serialize($array));
$array = unserialize(file_get_contents('foo.txt')));

哦,我现在真的不知道你如何回应阵列,但echo array('foo' => 'bar');将始终打印Array

答案 1 :(得分:4)

如果您希望它具有可读性,您可以这样做:

<?php
ob_start();
print_r($data);
$textualRepresentation = ob_get_contents();
ob_end_clean();

file_put_contents($file, $textualRepresentation);
?>

答案 2 :(得分:2)

或者如果您想返回一个更易于在txt文件中读取的格式化数组,请使用print_r

  

如果您想捕获print_r()的输出,请使用return   参数。当此参数设置为TRUE时,print_r()将返回   而不是打印信息。

代码是:

$txt = "<pre>".print_r($data, true)."</pre>";
file_put_contents('file.txt', $txt);

答案 3 :(得分:1)

您可以serialize数组,然后在重新加载文件后使用它。您还可以将数组编码为json_encode的JSON对象并写入.json文件。

答案 4 :(得分:1)

Definetelly你可以使用var_export功能:

$contents = var_export($array, true);

file_put_contents('foo.txt', "<?php\n return {$contents};\n ?>");
// and then use something like this to get it:
$new_array = require('foo.txt');

答案 5 :(得分:1)

如果您熟悉var_dump()的输出,更好的解决方案可能是捕获其输出并将其放入文件中,或者甚至将print_r()如下:

ob_start();
print_r($array);
$result = ob_get_clean();
file_put_contents('file.txt', $result);

请注意,ob_get_clean()本质上执行ob_get_contents()ob_end_clean()

答案 6 :(得分:0)

您可以设置一个递归函数,该函数可以遍历数组的每个成员,检查它本身是否为数组,如果是,则再次在该成员上调用该函数,如果不是只打印出其内容。像这样:

function file_put_contents_deep( $file, $data) {
  if ( is_array( $data ) {
    foreach ( $data as $item ) {
      if (is_array( $item ) {
        file_put_contents_deep( $file, $item );
      else {
        file_put_contents( $file, $item);
      }
    }
  } else {
    file_put_contents( $file, $data );
  }
}

答案 7 :(得分:0)

正如最佳答案所述,使用serialize是一个不错的选择。但是,您也可以在数组的每个项之后使用PHP_EOL存储数组,并使用file命令检索数组。

function file_put_array($path, $contents)
{
    if (is_array($contents))
    {
        foreach ($contents as $item)
            $str .= $item.PHP_EOL;
        file_put_contents($path, $str);
        return true;
    }
    return false;
}

并检索内容:

$contents = file($path, FILE_IGNORE_NEW_LINES);

答案 8 :(得分:-1)

$content="< ?php"."\r\n";
$str = json_encode($array);
$content.="$";
$content.="list=json_decode('";
$content.=$str;
$content.="');";
$ds=DIRECTORY_SEPARATOR;
file_put_contents(__DIR__ . $ds . 'list.php', $content);