0

一度に複数のphp配列を保存しようとしています。配列は、パーサー関数からも 1 つずつ取得されます。私はそれらをすべてメモリに保持してから、次のように一度にすべて書き込んでいました。

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

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

しかし、この論理は長くは続きませんでした。すぐにメモリが不足し始めました。配列を一度に 1 つずつ同じファイルに書き込み、それらも一度に 1 つずつ読みたいと思います。これは私のライター機能です:

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 に答える