我试图一次保存多个php数组。从解析器函数得到的数组也是一次一个。我曾经把它们都保存在内存中,然后一次把它们写下来,像这样:
while($onearr = parser())
$allarr[] = $onearr;
..
..
fwrite($filename,json_encode($allarr));
但是这个逻辑并没有坚持多久。我的内存很快就用完了。我想把数组一次一个地写入同一个文件,一次一个地读取它们。这是我的writer函数:
function savearr($onearr) {
if($fp = fopen('arrFile.json','a+')) {
$rc = fwrite($fp, json_encode($onearr));
fclose($fp);
}
}
现在我无法找到读取这些数组的方法!有什么办法吗?我试着一次读取整个文件,但不确定如何将其正确解析为单个数组以匹配原始数组!
Thanks in advance
首先,您可能需要重新考虑您的savearr()函数,您每次写入数组时都会打开/关闭文件。也许一个类注释:这些都没有测试过:
class ArrayWriter {
protected $fp;
public function __construct() {
$this->fp = fopen('arrFile.json', 'a+');
if(!$this->fp) die("Unable to open file");
}
public function __destruct() {
if($this->fp) fclose($this->fp);
}
public function write($array = array()) {
if($this->fp) fwrite($this->fp, json_encode($array) . "'n");
}
}
现在我们已经清除了这个,我们可以做相反的读取:
function read() {
$arrays = file('arrFile.json');
$result = array();
foreach($arrays as $line)
$result[] = json_decode($line);
}
return $result;
}