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);
rss_feed