mehr-it / csv
PHP的高级CSV读取器和写入器
1.10.0
2023-06-27 08:44 UTC
Requires
- php: >=7.1.0
- ext-iconv: *
- ext-mbstring: *
- thecodingmachine/safe: ^1.3.3
Requires (Dev)
- phpunit/phpunit: ^7.4
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
。