麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

PHP快速按行讀取CSV大文件的封裝類分享(也適用

2020-03-22 19:50:06
字體:
來源:轉載
供稿:網友
PHP PHP快速按行讀取CSV大文件的封裝類分享(也適用于其它超大文本文件)
CSV大文件的讀取已經在前面講述過了(PHP按行讀取、處理較大CSV文件的代碼實例),但是如何快速完整的操作大文件仍然還存在一些問題。1、如何快速獲取CSV大文件的總行數?辦法一:直接獲取文件內容,使用換行符進行拆分得出總行數,這種辦法對小文件可行,處理大文件時不可行;
辦法二:使用fgets一行一行遍歷,得出總行數,這種辦法比辦法一好一些,但大文件仍有超時的可能;
辦法三:借助SplFileObject類,直接將指針定位到文件末尾,通過SplFileObject::key方法獲取總行數,這種辦法可行,且高效。具體實現方法:
復制代碼 代碼如下:
$csv_file = 'path/bigfile.csv';
$spl_object = new SplFileObject($csv_file, 'rb');
$spl_object- seek(filesize($csv_file));
echo $spl_object- key();

2、如何快速獲取CSV大文件的數據?仍然使用PHP的SplFileObject類,通過seek方法實現快速定位。
復制代碼 代碼如下:
$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文件讀取的類:
復制代碼 代碼如下:
html' target='_blank'>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 0) ? 0 : $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;
}
}
調用方法如下:
復制代碼 代碼如下:
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即可。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜男人免费视频 | 国产亚洲精品久久午夜玫瑰园 | 史上最强炼体老祖动漫在线观看 | 精品中文字幕视频 | 免费一区区三区四区 | 国产成人自拍视频在线 | 狠狠操人人干 | 久久99国产精品久久 | 最新一区二区三区 | 欧美激情首页 | 91成人免费视频 | 色无极影院亚洲 | 久久2019中文字幕 | 欧美18—19sex性护士中国 | 免费观看一级欧美大 | 欧美在线观看视频一区 | 黄色一级片在线观看 | 今井夏帆av一区二区 | 伦一区二区三区中文字幕v亚洲 | 亚洲第一色婷婷 | 黄网站在线观 | 国产欧美在线观看不卡一 | 成人午夜影院 | 日本中文字幕电影在线观看 | 精品国产一区二区三区久久久蜜月 | 成人免费观看毛片 | 欧美日韩爱爱视频 | 欧美黑人伦理 | 色成人在线 | 婷婷中文字幕一区二区三区 | 亚洲人成中文字幕在线观看 | 99国产精品欲a | 午夜在线视频观看 | 九九热视频这里只有精品 | 午夜影院在线免费观看 | 国产91对白叫床清晰播放 | 91在线观看 | 国产免费v片 | 欧产日产国产精品99 | 日本人乱人乱亲乱色视频观看 | 国产亚洲精品网站 |