0

我正在尝试一次保存多个 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);
    }   
}

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

提前致谢

4

1 回答 1

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;
}
于 2013-05-31T19:29:45.927 回答