PHP Conference Japan 2024

SplFileObject::getCsvControl

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

SplFileObject::getCsvControl获取 CSV 的分隔符、围闭符和转义字符

描述

public SplFileObject::getCsvControl(): array

获取用于解析 CSV 字段的分隔符、围闭符和转义字符。

参数

此函数没有参数。

返回值

返回一个索引数组,包含分隔符、围闭符和转义字符。

变更日志

版本 描述
7.4.0 转义字符现在可以为空字符串。
7.0.10 将转义字符添加到返回的数组中。

示例

示例 #1 SplFileObject::getCsvControl() 示例

<?php
$file
= new SplFileObject("data.txt");
print_r($file->getCsvControl());
?>

以上示例将输出类似以下内容

Array
(
    [0] => ,
    [1] => "
    [2] => \
)

参见

添加注释

用户贡献的笔记 3 个笔记

greg dot bowler at g105b dot com
9 年前
请注意,此函数不会从给定文件中神奇地猜测 CSV 控制,而是返回之前使用 SplFileObject::setCsvControl() 设置的内容。
faure dot daniel dot 57 at gmail dot com
3 年前
给定 CSV 或任何文本文件的绝对路径以及可能的定界符列表,并假设行长达 4096 个字符,我使用

<?php
function guess_delimiter($file, $delimiters=[',',';'])
{
$h = fopen($file,'r');
$count = [];
foreach (
$delimiters as $del) {
$count[$del] = 0;
while ((
$bufer = fgets($h, 4096)) !== false) {
$count[$del]+=substr_count($bufer, $del);
}
rewind($h);
}
fclose($h);
return
array_search(max($count), $count);
}
匿名用户
11 年前
看起来这个函数总是返回相同的定界符。

<?php
file_put_contents
("A;B;C;D\n0;0;0;0", "test.txt");

$file = new SplFileObject("test.txt");
var_dump($file->getCsvControl());
?>

array(2) {
[0]=>
string(1) ","
[1]=>
string(1) """
}
To Top