ホームページ >バックエンド開発 >PHPチュートリアル >PHP ノート: 大きなファイルの定期的な読み取りと書き込みの分析_PHP チュートリアル

PHP ノート: 大きなファイルの定期的な読み取りと書き込みの分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:12:16893ブラウズ

最近、行数の多いファイル(数百万行程度)を読み込むためにPHPの勉強をしているのですが、簡単な勉強をしてみました

file() 関数の効率に関する最初の問題です。

file() 関数の効率は非常に低いので、1 行に 1 つのデータが対応するような通常のファイルの場合は、file() 関数を使用しないようにしてください。

file_get_contents() を使用してから、explode を使用してカットすると、効率が 3 分の 1 速くなります。

例:

ファイルスタイルは次のとおりです:

11111n

22222n

33333n

44444n

55555n

……ん

んんんんんんんんん

file($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 番目で、1 番目のタイプとほぼ同じくらい効率的であることがわかりました。これは私が予想していたものとの間には大きなギャップがあります。本当にびっくりです

http://www.bkjia.com/PHPjc/326758.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/326758.html技術記事最近取り組んでいるのは、効率の問題を考慮して、PHP がどのようにして大量の行数 (約 100 万行) のファイルを読み込めるかを研究していることです。 file() 関数の効率の問題 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。