PHP快速按行讀取CSV大文件的封裝類分享(也適用于其它超大文本文件)
Jun 13, 2016 am 09:39 AM
CSV大文件的讀取已經(jīng)在前面講述過了(PHP按行讀取、處理較大CSV文件的代碼實例),但是如何快速完整的操作大文件仍然還存在一些問題。
1、如何快速獲取CSV大文件的總行數(shù)?
辦法一:直接獲取文件內(nèi)容,使用換行符進(jìn)行拆分得出總行數(shù),這種辦法對小文件可行,處理大文件時不可行;
辦法二:使用fgets一行一行遍歷,得出總行數(shù),這種辦法比辦法一好一些,但大文件仍有超時的可能;
辦法三:借助SplFileObject類,直接將指針定位到文件末尾,通過SplFileObject::key方法獲取總行數(shù),這種辦法可行,且高效。
具體實現(xiàn)方法:
復(fù)制代碼 代碼如下:
$csv_file = 'path/bigfile.csv';
$spl_object = new SplFileObject($csv_file, 'rb');
$spl_object->seek(filesize($csv_file));
echo $spl_object->key();
2、如何快速獲取CSV大文件的數(shù)據(jù)?
仍然使用PHP的SplFileObject類,通過seek方法實現(xiàn)快速定位。
復(fù)制代碼 代碼如下:
$csv_file = 'path/bigfile.csv';
$start = 100000;??// 從第100000行開始讀取
$num = 100;????// 讀取100行
$data = array();
$spl_object = new SplFileObject($csv_file, 'rb');
$spl_object->seek($start);
while ($num-- && !$spl_object->eof()) {
?$data[] = $spl_object->fgetcsv();
?$spl_object->next();
}
print_r($data);
3、綜合上面兩點,整理成一個csv文件讀取的類:
復(fù)制代碼 代碼如下:
class CsvReader {
?private $csv_file;
?private $spl_object = null;
?private $error;
?public function __construct($csv_file = '') {
??if($csv_file && file_exists($csv_file)) {
???$this->csv_file = $csv_file;
??}
?}
?public function set_csv_file($csv_file) {
??if(!$csv_file || !file_exists($csv_file)) {
???$this->error = 'File invalid';
???return false;
??}
??$this->csv_file = $csv_file;
??$this->spl_object = null;
?}
?public function get_csv_file() {
??return $this->csv_file;
?}
?private function _file_valid($file = '') {
??$file = $file ? $file : $this->csv_file;
??if(!$file || !file_exists($file)) {
???return false;
??}
??if(!is_readable($file)) {
???return false;
??}
??return true;
?}
?private function _open_file() {
??if(!$this->_file_valid()) {
???$this->error = 'File invalid';
???return false;
??}
??if($this->spl_object == null) {
???$this->spl_object = new SplFileObject($this->csv_file, 'rb');
??}
??return true;
?}
?public function get_data($length = 0, $start = 0) {
??if(!$this->_open_file()) {
???return false;
??}
??$length = $length ? $length : $this->get_lines();
??$start = $start - 1;
??$start = ($start ??$data = array();
??$this->spl_object->seek($start);
??while ($length-- && !$this->spl_object->eof()) {
???$data[] = $this->spl_object->fgetcsv();
???$this->spl_object->next();
??}
??return $data;
?}
?public function get_lines() {
??if(!$this->_open_file()) {
???return false;
??}
??$this->spl_object->seek(filesize($this->csv_file));
??return $this->spl_object->key();
?}
?public function get_error() {
??return $this->error;
?}
}
調(diào)用方法如下:
復(fù)制代碼 代碼如下:
include('CsvReader.class.php');
$csv_file = 'path/bigfile.csv';
$csvreader = new CsvReader($csv_file);
$line_number = $csvreader->get_lines();
$data = $csvreader->get_data(10);
?
echo $line_number, chr(10);
print_r($data);
其實,上述CsvReader類并不只針對CSV大文件,對于其他文本類型的大文件或超大文件同樣可用,前提是將類中fgetcsv方法稍加改動為current即可。
?
?

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPを設(shè)定するための鍵は、インストールメソッドを明確にし、PHP.iniを構(gòu)成し、Webサーバーに接続し、必要な拡張機(jī)能を有効にすることです。 1. PHPのインストール:LinuxにAPTを使用し、Mac用のHomeBrew、およびWindowsに推奨されるXAMPPを使用します。 2。PHP.iniの構(gòu)成:エラーレポート、制限のアップロードなどを調(diào)整し、サーバーを再起動します。 3。Webサーバーの使用:Apacheはmod_phpを使用し、nginxはphp-fpmを使用します。 4.完全な機(jī)能をサポートするために、Mysqli、JSON、MbStringなど、一般的に使用される拡張機(jī)能:MySqli、JSON、Mbstringなどをインストールします。

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお勧めします。 2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時にネストを避ける必要があります。

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強(qiáng)調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進(jìn)します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

良いコメントを書くための鍵は、コードの読みやすさを改善するために「何が行われたか」ではなく「なぜ」を説明することです。 1。コメントは、価値の選択や処理の背後にある考慮事項など、論理的な理由を説明する必要があります。 2。複雑なロジックに段落注釈を使用して、関數(shù)またはアルゴリズムの全體的な考え方を要約します。 3.コードとの一貫性を確保し、誤解を招くことを避け、必要に応じて時代遅れのコンテンツを削除するために、コメントを定期的に維持します。 4.コードをレビューする際にコメントを同期して確認(rèn)し、コードコメントの負(fù)擔(dān)を軽減するためにドキュメントを介してパブリックロジックを記録します。

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

コメントは、古いインターフェイスとの互換性やサードパーティの制限など、機(jī)能ではなくコードの存在の理由を説明したいため、不注意にすることはできません。コメントしなければならない領(lǐng)域には、複雑な條件付き判斷、特別なエラー処理ロジック、一時的なバイパス制限が含まれます。コメントを書くためのより実用的な方法は、シーンに基づいてシングルラインのコメントを選択したり、コメントをブロックすることです。ドキュメントブロックコメントを使用して、関數(shù)、クラス、ファイルの開始時にパラメーターと返品値を説明し、コメントを更新します。複雑なロジックについては、前のロジックにラインを追加して、全體的な意図を要約できます。同時に、コードを封印するためにコメントを使用しないでください。バージョン制御ツールを使用します。

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

phpblockcommentsEursefurwritingmulti-lineexplanations、一時的にdisabledingcode、およびgeneratingdocumentation.theyshouldnotedorleftunclosed.blockcommentshelpindocumentingのfunctionswithphpdoc、whitooklikephpstormuseuto-compling-compling-compling comprivedoc
