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 格式的字段然后返回一個(gè)包含這些字段的數(shù)組。

參數(shù)

handle

一個(gè)由 fopen()、popen()fsockopen() 產(chǎn)生的有效文件指針。

length

必須大于 CVS 文件內(nèi)最長(zhǎng)的一行。在 PHP 5 中該參數(shù)是可選的。如果忽略(在 PHP 5.0.4 以后的版本中設(shè)為 0)該參數(shù)的話,那么長(zhǎng)度就沒有限制,不過可能會(huì)影響執(zhí)行效率。

delimiter

設(shè)置字段分界符(只允許一個(gè)字符)。

enclosure

設(shè)置字段環(huán)繞符(只允許一個(gè)字符)。

escape

設(shè)置轉(zhuǎn)義字符(只允許一個(gè)字符),默認(rèn)是一個(gè)反斜杠。

返回值

返回包含讀取字段的索引數(shù)組。

注意:

CSV 文件中的空行將被返回為一個(gè)包含有單個(gè) null 字段的數(shù)組,不會(huì)被當(dāng)成錯(cuò)誤。

注意: 在讀取在 Macintosh 電腦中或由其創(chuàng)建的文件時(shí), 如果 PHP 不能正確的識(shí)別行結(jié)束符,啟用運(yùn)行時(shí)配置可選項(xiàng) auto_detect_line_endings 也許可以解決此問題。

如果提供了無效的文件指針,fgetcsv() 會(huì)返回 null。 其他錯(cuò)誤,包括碰到文件結(jié)束時(shí)返回 false,。

更新日志

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

范例

示例 #1 讀取并顯示 CSV 文件的整個(gè)內(nèi)容

<?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);
}
?>

注釋

注意:

該函數(shù)對(duì)區(qū)域設(shè)置是敏感的。比如說 LANG 設(shè)為 en_US.UTF-8 的話,單字節(jié)編碼的文件就會(huì)出現(xiàn)讀取錯(cuò)誤。

參見

  • str_getcsv() - 解析 CSV 字符串為一個(gè)數(shù)組
  • explode() - 使用一個(gè)字符串分割另一個(gè)字符串
  • file() - 把整個(gè)文件讀入一個(gè)數(shù)組中
  • pack() - 將數(shù)據(jù)打包成二進(jìn)制字符串
  • fputcsv() - 將行格式化為 CSV 并寫入文件指針