str_getcsv()

1. 定义

该函数将一个csv格式的字符串解析到一个数组中,返回含有该csv字段值的数组。

2. 语法

str_getcsv ( string $csv [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]] ) : array

3. 参数说明

参数 可选性 数据类型 描述
$csv 必需 字符串 csv格式的字符串
$delimiter 可选 字符串 字段分界符,默认为逗号,,仅允许单个字符
$enclosure 可选 字符串 字段包裹符(csv字符串中将字段值包裹起来的符号),默认为双引号",仅允许单个字符
$escape 可选 字符串 转义字符,默认为反斜线\,仅允许单个字符

4. 示例

<?php

// str_getcsv()
// 读取csv字符串值,并返回包含csv字段值的数组

$csv = "china,guangdong,guangzhou,tianhe,'113.329884,23.154799',1,'2019-01-01 12:00:00','1,2,3,4,5,6'";
$res = str_getcsv($csv, ',', "'");
print_r($res);
/* 输出:
Array
(
    [0] => china
    [1] => guangdong
    [2] => guangzhou
    [3] => tianhe
    [4] => 113.329884,23.154799
    [5] => 1
    [6] => 2019-01-01 12:00:00
    [7] => 1,2,3,4,5,6
)
*/

// CSV字符串(一行数据)中含有中文字符时,需要先转码
$csv = "中国,广东省,广州市,天河区,'113.329884,23.154799',1,'2019-01-01 12:00:00','1,2,3,4,5,6'";
$csv = iconv('UTF-8', 'gbk', $csv);// 将UTF-8编码转为GBK字符集
$res = str_getcsv($csv, ',', "'");
foreach ($res as $key => $value) {
    $res[$key] = iconv('gbk', 'UTF-8', $value);
}
print_r($res);
/* 输出:
Array
(
    [0] => 中国
    [1] => 广东省
    [2] => 广州市
    [3] => 天河区
    [4] => 113.329884,23.154799
    [5] => 1
    [6] => 2019-01-01 12:00:00
    [7] => 1,2,3,4,5,6
)
*/

// 读取多行数据csv文件时,使用`file()`函数逐行读取数据
// 再利用`array_map()`函数对每行数据都调用`str_getcsv()`函数
$csv = file('demo.csv');
$res = array_map('str_getcsv', $csv);
print_r($res);

5. 延展阅读

  • fgetcsv():从文件句柄中读取一行数据并找到 CSV 格式的字段,并返回包含这些字段的数组