国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 php手冊(cè) PHP快速按行讀取CSV大文件的封裝類分享(也適用于其它超大文本文件)

PHP快速按行讀取CSV大文件的封裝類分享(也適用于其它超大文本文件)

Jun 13, 2016 am 09:39 AM
csv php 大文件

CSV大文件的讀取已經(jīng)在前面講述過了(PHP按行讀取、處理較大CSV文件的代碼實(shí)例),但是如何快速完整的操作大文件仍然還存在一些問題。

1、如何快速獲取CSV大文件的總行數(shù)?

辦法一:直接獲取文件內(nèi)容,使用換行符進(jìn)行拆分得出總行數(shù),這種辦法對(duì)小文件可行,處理大文件時(shí)不可行;
辦法二:使用fgets一行一行遍歷,得出總行數(shù),這種辦法比辦法一好一些,但大文件仍有超時(shí)的可能;
辦法三:借助SplFileObject類,直接將指針定位到文件末尾,通過SplFileObject::key方法獲取總行數(shù),這種辦法可行,且高效。

具體實(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方法實(shí)現(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、綜合上面兩點(diǎn),整理成一個(gè)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);


其實(shí),上述CsvReader類并不只針對(duì)CSV大文件,對(duì)于其他文本類型的大文件或超大文件同樣可用,前提是將類中fgetcsv方法稍加改動(dòng)為current即可。

?

?

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

PHP設(shè)置的簡(jiǎn)單指南 PHP設(shè)置的簡(jiǎn)單指南 Jul 18, 2025 am 04:25 AM

PHP設(shè)置的關(guān)鍵在于明確安裝方式、配置php.ini、連接Web服務(wù)器及啟用必要擴(kuò)展。1.安裝PHP:Linux用apt、Mac用Homebrew、Windows推薦XAMPP;2.配置php.ini:調(diào)整錯(cuò)誤報(bào)告、上傳限制等并重啟服務(wù)器;3.搭配Web服務(wù)器:Apache通過mod_php,Nginx使用PHP-FPM;4.安裝常用擴(kuò)展:如mysqli、json、mbstring等以支持完整功能。

在PHP中評(píng)論代碼 在PHP中評(píng)論代碼 Jul 18, 2025 am 04:57 AM

PHP注釋代碼常用方法有三種:1.單行注釋用//或#屏蔽一行代碼,推薦使用//;2.多行注釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧注釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時(shí)需注意閉合符號(hào)和避免嵌套。

撰寫PHP評(píng)論的提示 撰寫PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關(guān)鍵在于明確目的與規(guī)范,注釋應(yīng)解釋“為什么”而非“做了什么”,避免冗余或過于簡(jiǎn)單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背后的原因,如說明為何需手動(dòng)輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問題,便于后續(xù)追蹤與協(xié)作。好的注釋能降低溝通成本,提升代碼維護(hù)效率。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

編寫有效的PHP評(píng)論 編寫有效的PHP評(píng)論 Jul 18, 2025 am 04:44 AM

注釋不能馬虎是因?yàn)樗忉尨a存在的原因而非功能,例如兼容老接口或第三方限制,否則看代碼的人只能靠猜。必須加注釋的地方包括復(fù)雜的條件判斷、特殊的錯(cuò)誤處理邏輯、臨時(shí)繞過的限制。寫注釋更實(shí)用的方法是根據(jù)場(chǎng)景選擇單行注釋或塊注釋,函數(shù)、類、文件開頭用文檔塊注釋說明參數(shù)與返回值,并保持注釋更新,對(duì)復(fù)雜邏輯可在前面加一行概括整體意圖,同時(shí)不要用注釋封存代碼而應(yīng)使用版本控制工具。

通過評(píng)論提高可讀性 通過評(píng)論提高可讀性 Jul 18, 2025 am 04:46 AM

寫好注釋的關(guān)鍵在于說明“為什么”而非僅“做了什么”,提升代碼可讀性。1.注釋應(yīng)解釋邏輯原因,例如值選擇或處理方式背后的考量;2.對(duì)復(fù)雜邏輯使用段落式注釋,概括函數(shù)或算法的整體思路;3.定期維護(hù)注釋確保與代碼一致,避免誤導(dǎo),必要時(shí)刪除過時(shí)內(nèi)容;4.在審查代碼時(shí)同步檢查注釋,并通過文檔記錄公共邏輯以減少代碼注釋負(fù)擔(dān)。

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易于效率,啟動(dòng)啟動(dòng)tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

掌握PHP塊評(píng)論 掌握PHP塊評(píng)論 Jul 18, 2025 am 04:35 AM

PHPblockcommentsareusefulforwritingmulti-lineexplanations,temporarilydisablingcode,andgeneratingdocumentation.Theyshouldnotbenestedorleftunclosed.BlockcommentshelpindocumentingfunctionswithPHPDoc,whichtoolslikePhpStormuseforauto-completionanderrorche

See all articles