mehr-it/csv

PHP的高级CSV读取器和写入器

1.10.0 2023-06-27 08:44 UTC

This package is auto-updated.

Last update: 2024-09-27 12:07:26 UTC


README

这个库旨在为PHP中的CSV提供高级支持。这包括字符集转换、正确处理转义序列和字节顺序标记(对于UTF-8、UTF-16和UTF-32)。

CSV写入器还支持“始终引用”和自定义行断开(EOL)。

写入器用法

以下示例相当自解释

$writer = new CsvWriter();
$writer
	->setDelimiter(';')
	->setEnclosure("'")
	->setEscape('\\')
	->setAlwaysQuote(true)
	->open($resource)
	->writeLine(['a', 'b', 'c'])
	->close();

如果您首先定义了列,也可以将数据作为带有列键的关联数组传递。这允许省略空列

$writer = new CsvWriter();
$writer
	->open($resource)
	->columns(['a' => 'Col A', 'b' => 'Col B', 'c' => 'Col C'])
	->writeData(['a' => 15, 'b' => 16, 'c' => 17])
	->writeData(['a' => 15, 'b' => 16])
	->close();

读取器用法

$reader = new CsvReader();
$reader
    ->setDelimiter(';')
    ->setEnclosure("'")
    ->setEscape('\\')
    ->open($resource);
    
while (($line = $reader->readLine()) !== false) {
    var_dump($line);
}

$reader->close();    

要接收带有列键的关联数组,可以从第一行读取列,并使用readData()方法

$reader = new CsvReader();
$row = $reader
    ->open($resource)
    ->readColumns()
    ->readData();

如果文件中没有列,可以手动设置

$reader = new CsvReader();
$row = $reader
    ->open($resource)
    ->setColumns(['a', 'b'])
    ->readData();

值转换

以下示例演示了转换的使用,以便轻松读取数据类型

 $reader = new CsvReader();
 $row = $reader
     ->open($resource)
     ->setColumns(['a', 'b', 'c', 'd', 'e'])
     ->setCasts(
        'a' => 'number',
        'b' => 'json',
        'c' => 'split:|'
        'd' => function($v) {
            return 'x-' . $v;
        },
        'e' => 'number:,:.',
     );
     ->readData();

如果值无法转换,则该字段的值将为null