SplFileObject::getCsvControl

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

SplFileObject::getCsvControlGet the delimiter, enclosure and escape character for CSV

说明

public SplFileObject::getCsvControl ( ) : array

Gets the delimiter, enclosure and escape character used for parsing CSV fields.

参数

此函数没有参数。

返回值

Returns an indexed array containing the delimiter, enclosure and escape character.

更新日志

版本 说明
7.4.0 The escape character can now be an empty string.
7.0.10 Added the escape character to the returned array.

范例

Example #1 SplFileObject::getCsvControl() example

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

以上例程的输出类似于:

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

参见

User Contributed Notes

faure dot daniel dot 57 at gmail dot com 14-Oct-2021 05:31
Given an absolute path to a CSV or any text file and a list of possible delimiters and assuming lines are up to 4096 characters long, I use

<?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);
}
greg dot bowler at g105b dot com 06-Feb-2015 05:47
Note that this function does not magically guess the CSV control from a given file, rather it returns what has been priorly set with SplFileObject::setCsvControl().
Anonymous 11-Sep-2013 02:07
Seems that this function always returns the same delimiter.

<?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) """
}
PHP8中文手册 站长在线 整理 版权归PHP文档组所有