PHP
文件系统 | File System

fgetcsv

fgetcsv

(PHP 4, PHP 5, PHP 7)

fgetcsv - 从文件指针获取行并解析CSV字段

描述

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

与fgets()类似,不同之处在于fgetcsv()解析为CSV格式的字段读取的行,并返回包含读取字段的数组。

参数

handle

指向由fopen(),popen()或fsockopen()成功打开的文件的有效文件指针。

length

必须大于CSV文件中找到的最长行(以字符为单位)(允许拖尾行尾字符)。否则,该行将以length字符块分割,除非分割将发生在外壳内。

省略此参数(或者在PHP 5.1.0及更高版本中将其设置为0),最大行长度不受限制,这稍微慢一些。

delimiter

可选delimiter参数设置字段分隔符(仅限一个字符)。

enclosure

可选enclosure参数设置柜字符(仅限一个字符)。

escape

可选escape参数设置转义字符(仅限一个字符)。

返回值

返回包含读取字段的索引数组。

注意:CSV文件中的空白行将以包含单个空字段的数组的形式返回,并且不会被视为错误。

注意:如果PHP在读取Macintosh计算机上创建的文件或由Macintosh计算机创建文件时未正确识别行结束符,启用auto_detect_line_endings运行时配置选项可能有助于解决问题。

如果提供了无效句柄,则fgetcsv()将返回NULL,对其他错误(包括文件结尾)则返回FALSE。

更新日志

版本描述
5.3.0escape参数已添加
5.1.0长度现在是可选的。默认值为0,意味着没有长度限制。
4.3.5fgetcsv()现在是二进制安全的

例子

示例#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并写入文件指针

← fgetc

fgets →