fgetcsv
从文件指针中读入一行并解析 CSV 字段
&reftitle.description;
arrayfalsefgetcsv
resourcestream
intnulllength&null;
stringseparator","
stringenclosure"\""
stringescape"\\"
和 fgets 类似,只除了
fgetcsv 解析读入的行并找出 CSV
格式的字段然后返回一个包含这些字段的数组。
此函数会考虑区域设置。例如,如果 LC_CTYPE 为
en_US.UTF-8,可能会错误的解析某些单字节编码的数据。
&reftitle.parameters;
stream
一个由 fopen、popen 或
fsockopen 产生的有效文件指针。
length
必须大于在 CVS 文件(允许尾随行尾字符)中找到的最长行(以字符为单位)。否则,该行将拆分为
length 字符的块,除非拆分发生在环绕字符内。
忽略此参数(或者设为 0 或者在 PHP 8.0.0 及以后的版本中设为 &null;)行的最大长度将不受限制,速度稍慢。
separator
可选的 separator 参数,设置字段分隔符。必须是单字节字符。
enclosure
可选的 enclosure 参数,设置字段环绕符。必须是单字节字符。
escape
可选的 escape
参数,设置转义字符。必须是单字节字符或者空字符串。空字符串("")禁用所有的转义机制。
通常,在字段内,通过双倍的 enclosure 字符对其进行转义;但是可以使用
escape 字符作为替代。因此,对于默认参数值,"" 和
\" 具有相同的含义。除了允许转义 enclosure
字符外,escape 字符没有特殊含义;甚至不打算转义自身。
从 PHP 8.4.0 开始,弃用依赖 escape 的默认值。需要通过位置或使用命名参数明确提供。
&warning.csv.escape-parameter;
&reftitle.returnvalues;
成功时返回包含读取字段的索引数组,&return.falseforfailure;。
CSV 文件中的空行将被返回为一个包含有单个 null 字段的数组,不会被当成错误。
¬e.line-endings;
&reftitle.errors;
如果 separator 或者 enclosure
长度不是一个字节,则抛出 ValueError。
如果 escape 的长度不是一个字节或者为空字符串,则抛出 ValueError。
&reftitle.changelog;
&Version;
&Description;
8.4.0
现在已弃用依赖 escape 的默认值。
8.3.0
如果最后一个字段仅包含未终止的 enclosure,则返回空字符串,而不是带有单个 NULL 字节的字符串。
8.0.0
现在 length 允许为 null.
7.4.0
escape 参数也接受空字符串来禁用所有的转义机制。
&reftitle.examples;
读取并显示 CSV 文件的整个内容
$num fields in line $row:
\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "
\n";
}
}
fclose($handle);
}
?>
]]>
&reftitle.seealso;
fputcsv
str_getcsv
SplFileObject::fgetcsv
SplFileObject::fputcsv
SplFileObject::setCsvControl
SplFileObject::getCsvControl
explode
file
pack