读取保存在文件中的php数组?

时间:2011-02-14 20:58:10

标签: php file-io

我有一些保存在.log文件中的php数组

我想将它们读入一个php数组,例如

array [0] = .log文件中的第一个数组 array 1 = .log文件中的第二个数组

解决方案here对我不起作用

它没有给出这样的文件或目录错误,但是当我执行include_once('file.log')时,文件中的内容显示为输出(我不知道为什么)请帮助

4 个答案:

答案 0 :(得分:17)

在将数组作为文本写入文件之前,您可以serialize数组。然后,您可以从文件中读取数据,unserialize会将其重新转换为数组。

http://php.net/manual/en/function.serialize.php

编辑描述使用序列化/反序列化的过程:

所以你有一个数组:

$arr = array(
  'one'=>array(
      'subdata1',
      'subdata2'
  ),
  'two'='12345'
);

当我在该数组上调用serialize时,我得到一个字符串:

$string = serialize($arr);
echo $string;

OUTPUT: a:2:{s:3:"one";a:2:{i:0;s:8:"subdata1";i:1;s:8:"subdata2";}s:3:"two";s:5:"12345";}

所以我想将这些数据写入文件:

$fn= "serialtest.txt";
$fh = fopen($fn, 'w');
fwrite($fh, $string);
fclose($fh);

后来,我想使用那个数组。所以,我将读取该文件,然后反序列化:

$str = file_get_contents('serialtest.txt');
$arr = unserialize($str);
print_r($arr);

OUTPUT: Array ( [one] => Array ( [0] => subdata1 [1] => subdata2 ) [two] => 12345 ) 

希望有所帮助!

编辑2 嵌套演示

要在一段时间内将更多数组存储到此文件中,您必须创建父数组。这个数组是所有数据的容器,所以当你想要添加另一个数组时,你必须解压缩父数据库,然后将新数据添加到那个数组中,然后重新打包整个数据。

首先,设置您的容器:

// Do this the first time, just to create the parent container
$parent = array();
$string = serialize($arr);
$fn= "logdata.log";
$fh = fopen($fn, 'w');
fwrite($fh, $string);
fclose($fh);

现在,从那里开始,当你想要添加一个新数组时,首先你必须得到整个包并将其反序列化:

// get out the parent container
$parent = unserialize(file_get_contents('logdata.log'));

// now add your new data
$parent[] = array(
  'this'=>'is',
  'a'=>'new',
  'array'=>'for',
  'the'=>'log'
);

// now pack it up again
$fh = fopen('logdata.log', 'w');
fwrite($fh, serialize($parent));
fclose($fh);

答案 1 :(得分:2)

它真的需要2行代码($ ar是数组,$ filename是要保存的路径+文件名):

保存数组:

file_put_contents($ filename,serialize($ ar));

回读数组:

$ AR =反序列化(的file_get_contents($文件名));

答案 2 :(得分:1)

include_once显示输出,因此不是意料之外的。你能提供文件格式吗?

你可以使用file_get_contents('file.log')来获取文件的内容,然后从那里轻松地将它放入一个数组中(例如使用preg_split)。

答案 3 :(得分:1)

你需要“返回”数组,打开log file.log并在顶部添加return

相关问题