php json保存并读取多个数组到文件

时间:2013-05-31 19:21:32

标签: php arrays json serialization marshalling

我试图一次保存多个php数组。这些数组一次只能从一个解析器函数中找到我。我过去常常将它们全部留在内存中,然后像这样一次写下来:

while($onearr = parser())
     $allarr[] = $onearr;

  ..
  ..
  fwrite($filename,json_encode($allarr));

但这种逻辑并没有持续多久。我开始快速耗尽内存。 我想一次一个地将数组写入同一个文件,并一次读取一个。这是我的作家功能:

function savearr($onearr) {        
    if($fp = fopen('arrFile.json','a+'))  {    
       $rc = fwrite($fp, json_encode($onearr));
       fclose($fp);
    }   
}

现在我无法想办法读取这些数组!有办法吗?我尝试一次读取整个文件但不确定如何将其正确解析为单个数组以匹配原始文件!

提前致谢

1 个答案:

答案 0 :(得分:0)

首先,您可能需要重新考虑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;
}