n個のcsvファイルがあり、それらを相互に比較して後で変更する必要があります。問題は、各csvファイルに約800.000行あることです。
csvファイルを読むために私はfgetcsvを使用します、そしてそれはうまくいきます。いくつかのメモリパイクを取得しますが、最終的には十分に高速です。しかし、アレイを相互に比較しようとすると、時間がかかります。
もう1つの問題は、ファイルの数がnであるため、fgetcsvでcsvデータを取得するためにforeachを使用する必要があることです。最終的に1つの超大型配列になり、array_diffと比較できません。だから私はそれをネストされたforeachループと比較する必要があり、それは時間がかかります。
理解を深めるためのコードスニペット:
foreach( $files as $value ) {
$data[] = $csv->read( $value['path'] );
}
私のcsvクラスはfgetcsvを使用して、出力を配列に追加します。
fgetcsv( $this->_fh, $this->_lengthToRead, $this->_delimiter, $this->_enclosure )
すべてのcsvファイルのすべてのデータは$data配列に保存されます。これはおそらく、1つの配列のみを使用する最初の大きな間違いですが、foreachを使用せずにファイルを柔軟に維持する方法がわかりません。私は柔軟な変数名を使おうとしましたが、私もそこに固執しました:)
今、私はこの大きな配列を持っています。通常、値を相互に比較し、ファイル1のデータがファイル2に存在するかどうかを確認する場合は、array_diffまたはarray_intersectを使用します。しかし、この場合、私はこの1つの大きな配列しか持っていません。そして、私が言ったように、foreachを実行するには何年もかかります。
また、たった3つのファイルの後で、3*800.000エントリの配列があります。私は10ファイル後に私の記憶が爆発するだろうと思います。
では、PHPを使用してn個の非常に大きなcsvファイルを比較するためのより良い方法はありますか?