fgetcsv
(PHP 4, PHP 5, PHP 7, PHP 8)
fgetcsv — 從檔案指針中讀入一行並解析 CSV 欄位
說明
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($handle, 1000, ",")) !== 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 並寫入檔案指針