CSV概述
CSV(Comma Separated Values)即逗號分隔值,是一種常用的文本格式,用于存儲表格數據。每行表示一條記錄,每個字段之間用逗號隔開,一般以 .csv 作為文件擴展名。CSV 文件的優點是易讀易寫、可用 Excel 打開、大小較小等。
使用 PHP 操作 CSV
PHP 中提供了很多操作 CSV 文件的函數,但為了更方便、快捷地操作 CSV 文件,開源社區推出了 PHP Office 中的 Csv 庫。這個庫封裝了操作 CSV 文件所需要的各種功能,如讀取 CSV 文件、創建 CSV 文件、修改 CSV 文件、刪除 CSV 文件等。Csv 庫具有以下特點:
- 代碼簡單易用
- 執行效率高
- 支持多種 CSV 格式
- 便于擴展和定制
讀取 CSV 文件
使用 Csv 庫讀取 CSV 文件非常簡單,只需要傳入 CSV 文件的路徑即可。例如,我們有一個名為 data.csv 的 CSV 文件,里面包含兩列數據:姓名和年齡。我們可以這樣來讀取這個 CSV 文件:
require_once 'vendor/autoload.php'; use PhpOffice\Csv\CsvReader; $reader = new CsvReader(); $reader->setDelimiter(','); $reader->setEnclosure('"'); $reader->setSheetIndex(0); $reader->loadFile('data.csv'); foreach ($reader->getActiveSheet()->getRowIterator() as $row) { foreach ($row->getCellIterator() as $cell) { echo $cell->getValue() . ', '; } echo '<br>'; }上述代碼中調用了 Csv 庫中的 CsvReader 類,通過 loadFile() 方法加載了一個名為 data.csv 的 CSV 文件。接著我們使用 getActiveSheet() 方法獲取到當前頁數為 0 的 Worksheet 對象,并通過 getRowIterator() 和 getCellIterator() 方法遍歷每一行和每一列的數據,輸出結果如下:
Tom, 20, Jerry, 22, ...如果 CSV 文件中的一些值需要在讀入前轉換,可以直接在 CsvReader 中進行配置。如,需要將年齡升序排列:
... $reader->loadFile('data.csv'); $reader->setSortBy('age', SORT_ASC); foreach ($reader->getActiveSheet()->getRowIterator() as $row) { echo $row[0] . ', ' . $row[1] . '<br>'; }創建 CSV 文件 除了可以對已有的 CSV 文件進行操作外,Csv 庫還支持創建新的 CSV 文件。同樣是通過 CsvWriter 類來完成,這里我們以動態生成一個包含 fibonacci 數列的 CSV 文件作為示例:
require_once 'vendor/autoload.php'; use PhpOffice\Csv\CsvWriter; $writer = new CsvWriter(); $writer->setDelimiter(','); $writer->setEnclosure('"'); $writer->setSheetIndex(0); $writer->openToFile('fib.csv'); for ($i = 0; $i<= 15; $i++) { $writer->addRow( array( $i + 1, fibonacci($i) ) ); } function fibonacci($n) { $a = 0; $b = 1; for ($i = 0; $i< $n; $i++) { $tmp = $a; $a = $b; $b = $tmp + $a; } return $a; } $writer->close();上述代碼中定義了一個 fibonacci 方法,該方法用于生成斐波那契數列的第 n 項。通過 CsvWriter 的 openToFile() 方法打開一個名為 fib.csv 的 CSV 文件,然后循環生成 fibonacci 數列的前 16 項,并將每一項寫入 CSV 文件中,最后通過 close() 方法關閉文件。 修改 CSV 文件 如果需要修改 CSV 文件中的某些數據,Csv 庫也提供了相應的接口。我們以修改一個名為 data.csv 的 CSV 文件的年齡為例:
... $reader->loadFile('data.csv'); $writer = new CsvWriter(); $writer->setDelimiter(','); $writer->setEnclosure('"'); $writer->setSheetIndex(0); $writer->openToFile('new_data.csv'); foreach ($reader->getActiveSheet()->getRowIterator() as $row) { if ($row[0] == 'Tom') { $row[1] = 22; } $writer->addRow($row); } $writer->close();上述代碼中先使用 CsvReader 對象讀取 data.csv 文件,接著使用 CsvWriter 對象打開一個名為 new_data.csv 的新文件,循環讀取 data.csv 文件中每一行數據,如果當前行的姓名為 Tom,則修改年齡為 22,并將整行數據寫入新文件中。 刪除 CSV 文件 我們使用 CsvWriter 寫入的 CSV 文件很容易刪除。只需要使用 unlink() 函數即可:
unlink('new_data.csv');總結 PHP Office Csv 庫的使用非常方便,很好地封裝了操作 CSV 文件所需的各種功能。我們可以使用 CsvReader 類來讀取CSV文件,使用 CsvWriter 類來創建、修改和刪除CSV文件。如果你經常需要處理 CSV 格式的數據,那么建議嘗試使用 PHP Office Csv 庫,能夠節約你很多時間和精力。