PHP | fgetcsv 函數
怎樣讀取 CSV 文件
最近更新時間 2020-12-31 16:44:34
fgetcsv 函數從文件指針中讀入一行並解析 CSV 字段。
如果提供了無效的文件指針,fgetcsv() 會返回 null。其他錯誤,包括碰到文件結束時返回 false。CSV 文件中的空行將被返回為一個包含有單個 null 字段的數組,不會被當成錯誤。
函數定義
fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\\' ]]]] ) : array
// 源文件位於:ext/standard/file.c
# 函數定義
PHP_FUNCTION(fgetcsv)
{
char delimiter = ','; /* allow this to be set as parameter */
char enclosure = '"'; /* allow this to be set as parameter */
int escape = (unsigned char) '\\';
zend_long len = 0;
size_t buf_len;
char *buf;
php_stream *stream;
{
...
if (delimiter_str != NULL) {
/* Make sure that there is at least one character in string */
if (delimiter_str_len != 1) {
zend_argument_value_error(3, "must be a single character");
RETURN_THROWS();
}
/* use first character from string */
delimiter = delimiter_str[0];
}
...
PHP_STREAM_TO_ZVAL(stream, fd);
}
if (len < 0) {
if ((buf = php_stream_get_line(stream, NULL, 0, &buf_len)) == NULL) {
RETURN_FALSE;
}
} else {
buf = emalloc(len + 1);
if (php_stream_get_line(stream, buf, len + 1, &buf_len) == NULL) {
efree(buf);
RETURN_FALSE;
}
}
php_fgetcsv(stream, delimiter, enclosure, escape, buf_len, buf, return_value);
}
參數
- checkhandle -文件指針。文件指針必須有效,並且是通過 fopen() 或 fsockopen() 函數成功打開的文件(並還未由 fclose() 關閉)。
- checklength -行長度,可選。
- checkdelimiter -設置字段分界符(只允許一個字符)。
- checkenclosure -設置字段環繞符(只允許一個字符)。
- checkescape -設置轉義字符(只允許一個字符),默認是一個反斜槓。
返回值
- checkbool - 返回包含讀取字段的索引數組。
示例1: - 使用 fgetcsv() 函數從文件指針中讀入一行並解析 CSV 字段。
<?php
/**
* PHP 使用 fgetcsv() 函數從文件指針中讀入一行並解析 CSV 字段。
*
* @since Version 1.0.0
* @filesource
*/
// 打開文件
$fp = fopen('foo.csv', 'r');
// 判斷文件是否讀取成功
if(!$fp) exit(0);
// 讀取文件
$data = fgetcsv($fp);
// 關閉文件
fclose($fp);