最近、PHPが大量の行数(数百万行程度)のファイルをどのように読み込むかを研究しています。 概要は次のとおりです。
最初の問題は、file()関数の効率性です。file()関数の効率は非常に低いので、1行に1つの対応するデータなど、通常のファイルの場合は、file()関数を使用しないようにしてください
。
file_get_contents() を使用してから、explode を使用してカットすると、効率が 3 分の 1 速くなります。例:
ファイル形式は以下の通りです
11111n
22222n
33333n
44444n
55555n
…ん
んんんんんんんんんん
ファイル($file)を使用して読み込むと、時間がかかります。
次のメソッドを使用すると、explode("n",file_get_contents($file)); 効率が大幅に向上します。2 番目の項目は配列の走査メソッドです。
データが配列に読み込まれました。以下は走査です。
必要なのは、配列に値が存在するかどうか、たとえば 44444 が配列にあるかどうかを判断することです。最初に思い浮かぶのは in_array() です
。しかし、実験してみると効率が非常に悪いことが分かりましたので、他の人のコードを参考に配列をひっくり返してすべての値をインデックスにする方法を考えました。 ($arr in if [Index]==1) と書くだけで、確かに効率は高くなります
。配列の走査プロセス中に、配列が非常に大きく、配列内のすべてのデータを使用できない場合は、走査に使用される配列を抽出するのが最善です。これにより、効率が大幅に向上します。
第 3 条、配列の保存計算したデータをファイルに保存する方法としては、phpファイルに直接書き込む方法と、json文字列として保存する方法が考えられます。
最初の方法
ファイルを直接記述して PHP に保存します
必要なときに直接要求します。
2 番目の方法は、変数をシリアル化してから file_put_contents() をファイルに入れることです。これを使用する場合は、シリアル化解除しても問題ありません。
3番目のメソッドは2番目のメソッドと似ており、単にjson文字列として記述されています。テストの結果、2 番目のタイプが最も効率的で、3 番目のタイプが 2 番目で、2 番目のタイプの効率はほぼ同じであることがわかりました。最初のタイプが最も遅いです。私が予想していたものとは大きな違いがあります。本当にびっくりです
http://www.bkjia.com/PHPjc/371923.htmlwww.bkjia.comtrue
http://www.bkjia.com/PHPjc/371923.html