12

我有一个数组,使用后如下所示print_r

Array ( [0] => Array ( [0] => piklu [name] => piklu ) [1] => Array ( [0] => arindam [name] => arindam ) [2] => Array ( [0] => shyamal [name] => shyamal ) [3] => Array ( [0] => arko [name] => arko ) [4] => Array ( [0] => pamela [name] => pamela ) [5] => Array ( [0] => dodo [name] => dodo ) [6] => Array ( [0] => tanmoy [name] => tanmoy ) [7] => Array ( [0] => jitu [name] => jitu ) [8] => Array ( [0] => ajgar [name] => ajgar ) ) 

现在我想将此数组直接写入文件,我使用该file_put_contents方法,但我不知道如何从文件中获取数据,它们看起来与原始数据完全相同。有什么办法解决这个问题吗?

4

5 回答 5

33

您目前的问题基本上是您只能将字符串写入文件。所以为了使用file_put_contents你首先需要将你的数据转换为字符串。

对于这个特定的用例,有一个名为serialize的函数,它将任何 PHP 数据类型转换为字符串(资源除外)。

这是一个如何使用它的示例。

$string_data = serialize($array);
file_put_contents("your-file.txt", $string_data);

您可能还想稍后提取数据。只需使用反序列化将字符串数据从文件转换回数组。

这就是你的做法:

$string_data = file_get_contents("your-file.txt");
$array = unserialize($string_data);
于 2013-02-14T06:41:45.383 回答
8

这里有两种方法:

(1) 将数组对象的 JSON 表示形式写入文件。

$arr = array( [...] );
file_put_contents( 'data.txt', json_encode( $arr ) );

然后后来...

$data = file_get_contents( 'data.txt' );
$arr = json_decode( $data, true );

(2) 将数组对象的序列化表示写入文件。

$arr = array( [...] );
file_put_contents( 'data.txt', serialize( $arr ) );

然后后来...

$data = file_get_contents( 'data.txt' );
$arr = unserialize( $data );

我更喜欢 JSON 方法,因为它不像序列化那样容易损坏。您可以打开数据文件并对内容进行编辑,它会编码/解码回来而不会让人头疼。序列化数据不能轻易更改或损坏,否则 unserialize() 将不起作用。每个变量都由类型和长度定义,并且这些值必须随着您所做的实际更改而更新。

于 2013-02-14T06:41:10.577 回答
4

file_put_contents将字符串写入文件,而不是数组。http://php.net/manual/en/function.file-put-contents.php

如果您想将您在 print_r 中看到的内容写入文件,您可以试试这个:

ob_start();
print_r($myarray);
$output = ob_get_clean();
file_put_contents("myfile.txt",$output);
于 2013-02-14T06:42:29.063 回答
2

如果这是静态内容,更高效的方法是:

$filePath = 'path/to/file.php';

//Saving
file_put_contents($filePath, '<?php '.PHP_EOL.'return '.var_export($array, true).';');
 

//Retrieving data
$array = include $filePath;

这也将保存在 OPcode 缓存中,甚至可以预加载。但是,如果您使用 OPcode 缓存或预加载,这将不会在部署之间重新加载。

于 2021-03-09T17:23:37.090 回答
1

我不确定,但也许是这样的。您想在写入时序列化()数组。它会将您的数组放入 test.txt

file_put_contents('test.txt', serialize($array));
于 2013-02-14T06:41:40.187 回答