從檔案指針中讀入一行並解析 CSV 欄位

fgetcsv

(PHP 4, PHP 5, PHP 7, PHP 8)

fgetcsv從檔案指針中讀入一行並解析 CSV 欄位

說明

fgetcsv(
    resource $handle,
    int $length = 0,
    string $delimiter = ',',
    string $enclosure = '"',
    string $escape = '\\'
): array

fgets() 類似,只除了 fgetcsv() 解析讀入的行並找出 CSV 格式的欄位然後返回一個包含這些欄位的陣列。

參數

handle

一個由 fopen()popen()fsockopen() 產生的有效檔案指針。

length

必須大於 CVS 檔案內最長的一行。在 PHP 5 中該參數是可選的。如果忽略(在 PHP 5.0.4 以後的版本中設為 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。

delimiter

設定欄位分界符(只允許一個字元)。

enclosure

設定欄位環繞符(只允許一個字元)。

escape

設定轉義字元(只允許一個字元),預設是一個反斜槓。

返回值

返回包含讀取欄位的索引陣列。

注意:

CSV 檔案中的空行將被返回為一個包含有單個 null 欄位的陣列,不會被當成錯誤。

注意: 在讀取在 Macintosh 電腦中或由其建立的檔案時, 如果 PHP 不能正確的識別行結束符,啟用執行時配置可選項 auto_detect_line_endings 也許可以解決此問題。

如果提供了無效的檔案指針,fgetcsv() 會返回 null。 其他錯誤,包括碰到檔案結束時返回 false,。

更新日誌

版本 說明
5.3.0 增加了 escape 參數。
4.3.5 現在起 fgetcsv() 的操作是二進制安全的。
4.3.0 增加了 enclosure 參數。

範例

示例 #1 讀取並顯示 CSV 檔案的整個內容

<?php
$row 
1;
if ((
$handle fopen("test.csv""r")) !== FALSE) {
    while ((
$data fgetcsv($handle1000",")) !== FALSE) {
        
$num count($data);
        echo 
"<p> $num fields in line $row: <br /></p>\n";
        
$row++;
        for (
$c=0$c $num$c++) {
            echo 
$data[$c] . "<br />\n";
        }
    }
    
fclose($handle);
}
?>

註釋

注意:

該函式對區域設定是敏感的。比如說 LANG 設為 en_US.UTF-8 的話,單位元組編碼的檔案就會出現讀取錯誤。

參見

  • str_getcsv() - 解析 CSV 字串為一個陣列
  • explode() - 使用一個字串分割另一個字串
  • file() - 把整個檔案讀入一個陣列中
  • pack() - 將數據打包成二進制字串
  • fputcsv() - 將行格式化為 CSV 並寫入檔案指針

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *