在将文本写入文件之前,可以序列化数组.然后,您可以从文件中读取数据,unserialize将其重新转换为数组.
编辑描述使用serialize / unserialize的过程:
所以你有一个数组:
$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);
后来我想使用那个数组.所以,我会读取文件,然后unserialize:
$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);