php處理CSV文件的操作詳解
PHP 中操作 CSV 文件可以使用內(nèi)置的 fgetcsv() 和 fputcsv() 函數(shù)來讀取和寫入 CSV 文件。
讀取 CSV 文件:
// 打開 CSV 文件 $handle = fopen('data.csv', 'r'); // 讀取 CSV 文件中的數(shù)據(jù) while (($data = fgetcsv($handle)) !== false) { // 處理讀取到的數(shù)據(jù) var_dump($data); } // 關(guān)閉 CSV 文件 fclose($handle);
在上面的代碼中,我們使用 fopen() 函數(shù)打開一個(gè) CSV 文件,并傳入 'r' 模式來表示只讀模式。然后使用 while 循環(huán)和 fgetcsv() 函數(shù)讀取 CSV 文件中的每一行數(shù)據(jù),當(dāng) fgetcsv() 函數(shù)返回 false 時(shí)表示已經(jīng)讀取到了文件末尾,退出循環(huán)。讀取到的每一行數(shù)據(jù)都是一個(gè)數(shù)組,可以對這個(gè)數(shù)組進(jìn)行處理,例如使用 var_dump() 函數(shù)打印出來。
寫入 CSV 文件:
// 打開 CSV 文件 $handle = fopen('data.csv', 'w'); // 寫入數(shù)據(jù)到 CSV 文件中 $data = [ ['id', 'name', 'email'], [1, '張三', 'zhangsan@example.com'], [2, '李四', 'lisi@example.com'], [3, '王五', 'wangwu@example.com'], ]; foreach ($data as $row) { fputcsv($handle, $row); } // 關(guān)閉 CSV 文件 fclose($handle);
在上面的代碼中,我們使用 fopen() 函數(shù)打開一個(gè) CSV 文件,并傳入 'w' 模式來表示寫入模式。然后使用 foreach 循環(huán)遍歷一個(gè)二維數(shù)組 $data,使用 fputcsv() 函數(shù)將每一行數(shù)據(jù)寫入到 CSV 文件中。注意,每一行數(shù)據(jù)都是一個(gè)數(shù)組,數(shù)組中的每一個(gè)元素表示一個(gè) CSV 文件中的單元格。
使用 fputcsv() 函數(shù)寫入 CSV 文件時(shí),會(huì)自動(dòng)在每一個(gè)單元格中添加逗號,并將整行數(shù)據(jù)末尾添加回車換行符,因此不需要手動(dòng)添加。如果需要自定義分隔符和換行符,可以使用 fputcsv() 函數(shù)的第二和第三個(gè)參數(shù)。例如,如果要使用制表符作為分隔符,可以這樣寫:
fputcsv($handle, $row, "\t");
除了 fgetcsv() 和 fputcsv() 函數(shù)之外,還有一些第三方庫和擴(kuò)展可以用來操作 CSV 文件。例如,phpoffice/phpspreadsheet 是一個(gè)流行的 PHP Excel 庫,支持讀取和寫入多種格式的電子表格文件,包括 CSV 文件。
使用 phpoffice/phpspreadsheet 庫讀取 CSV 文件:
// 創(chuàng)建 Spreadsheet 對象 $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('data.csv'); // 獲取第一個(gè)工作表 $worksheet = $spreadsheet->getActiveSheet(); // 讀取工作表中的數(shù)據(jù) foreach ($worksheet->getRowIterator() as $row) { // 獲取一行數(shù)據(jù) $data = $row->toArray(); // 處理讀取到的數(shù)據(jù) var_dump($data); }
在上面的代碼中,我們使用 \PhpOffice\PhpSpreadsheet\IOFactory::load() 方法加載一個(gè) CSV 文件,并返回一個(gè) Spreadsheet 對象。然后通過 getActiveSheet() 方法獲取第一個(gè)工作表,并使用 getRowIterator() 方法獲取工作表中的每一行數(shù)據(jù)。getRowIterator() 方法返回一個(gè) Iterator 對象,我們可以使用 foreach 循環(huán)遍歷每一行數(shù)據(jù),使用 toArray() 方法將每一行數(shù)據(jù)轉(zhuǎn)換成數(shù)組,然后對這個(gè)數(shù)組進(jìn)行處理。
使用 phpoffice/phpspreadsheet 庫寫入 CSV 文件:
// 創(chuàng)建 Spreadsheet 對象 $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); // 獲取第一個(gè)工作表 $worksheet = $spreadsheet->getActiveSheet(); // 寫入數(shù)據(jù)到工作表中 $data = [ ['id', 'name', 'email'], [1, '張三', 'zhangsan@example.com'], [2, '李四', 'lisi@example.com'], [3, '王五', 'wangwu@example.com'], ]; foreach ($data as $row) { $worksheet->appendRow($row); } // 創(chuàng)建一個(gè) Writer 對象,保存 CSV 文件 $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Csv'); $writer->setUseBOM(true); // 設(shè)置使用 UTF-8 編碼 $writer->setDelimiter(','); // 設(shè)置分隔符 $writer->setEnclosure('"'); // 設(shè)置引號字符 $writer->setLineEnding("\r\n"); // 設(shè)置換行符 $writer->save('data.csv');
在上面的代碼中,我們創(chuàng)建了一個(gè) Spreadsheet 對象,并獲取第一個(gè)工作表。然后使用 foreach 循環(huán)遍歷一個(gè)二維數(shù)組 $data,使用 appendRow() 方法將每一行數(shù)據(jù)寫入到工作表中。注意,這里的寫入方式和使用 fputcsv() 函數(shù)略有不同,appendRow() 方法不會(huì)自動(dòng)添加逗號和回車換行符,需要手動(dòng)指定分隔符和換行符。
最后,我們使用 \PhpOffice\PhpSpreadsheet\IOFactory::createWriter() 方法創(chuàng)建一個(gè) Writer 對象,設(shè)置 CSV 文件的編碼、分隔符、引號字符和換行符,然后使用 save() 方法保存 CSV 文件。需要注意的是,save() 方法需要傳入一個(gè)文件名,如果文件名已經(jīng)存在,會(huì)自動(dòng)覆蓋。
以上就是php處理CSV文件的操作詳解的詳細(xì)內(nèi)容,更多關(guān)于php處理CSV文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
極力推薦一款小巧玲瓏的可視化編輯器bootstrap-wysiwyg
這篇文章主要為大家極力推薦一款小巧玲瓏的可視化編輯器bootstrap-wysiwyg,是一款基于jquery和bootstrap的可視化編輯器,感興趣的小伙伴們可以參考一下2016-05-05JavaScript實(shí)現(xiàn)導(dǎo)入導(dǎo)出excel的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript語言實(shí)現(xiàn)導(dǎo)入導(dǎo)出excel文件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-07-07JavaScript動(dòng)態(tài)操作表格實(shí)例(添加,刪除行,列及單元格)
這篇文章主要是對JavaScript動(dòng)態(tài)操作表格實(shí)例(添加,刪除行,列及單元格)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11JS簡單實(shí)現(xiàn)文件上傳實(shí)例代碼(無需插件)
注意一下:在chrome瀏覽器下,為了數(shù)據(jù)安全,隱藏的input:file不能trigger “click” 事件。 所以要設(shè)置input:file的透明度達(dá)到隱藏的效果2013-11-11JS實(shí)現(xiàn)的DOM插入節(jié)點(diǎn)操作示例
這篇文章主要介紹了JS實(shí)現(xiàn)的DOM插入節(jié)點(diǎn)操作,結(jié)合實(shí)例形式分析了javascript針對頁面dom元素動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04JS函數(shù)驗(yàn)證總結(jié)(方便js客戶端輸入驗(yàn)證)
JS函數(shù)驗(yàn)證總結(jié),都是一些基礎(chǔ)的東西,現(xiàn)在比較流行jquery了,不過這些東西仍然需要大家會(huì)。2010-10-10Bootstrap3.0建站教程(一)之bootstrap表單元素排版
本文給大家介紹Bootstrap3.0建站教程(一)之bootstrap表單元素排版,本文給大家列舉了文字和輸入框前后排列和上下排列的實(shí)例代碼,有需要的朋友參考下吧2016-06-06