luchaninov / csv-writer
CSV/TSV 文件/字符串生成器
1.0.1
2022-11-25 22:26 UTC
Requires
- php: >=8.1
- gupalo/json: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
从数组或对象创建 CSV/TSV 文件/字符串
如何安装
使用 composer 安装 luchaninov/csv-writer
包
$ composer require luchaninov/csv-writer
基本用法
您可以转换命名数组为 CSV 或 TSV
$items = [ ['k1' => 'v1_1', 'k2' => 'v1_2', 'k3' => 'v1_3'], ['k1' => 'v2_1', 'k2' => 'v2_2', 'k3' => 'v2_3'], ['k1' => 'v3_1', 'k2' => 'v3_2', 'k3' => 'v3_3'], ]; $s = (new CsvWriter())->generate($items); /* k1,k2,k3 v1_1,v1_2,v1_3 v2_1,v2_2,v2_3 v3_1,v3_2,v3_3 */
需要 TSV?将 CsvWriter
改为 TsvWriter
。
需要写入文件?
(new \Luchaninov\CsvWriter\CsvWriter())->write($filename, $items);
它使用生成器,所以几乎不使用内存。
高级用法
如果您有非字符串值,不要担心。它将尝试将它们转换为字符串。
$items = [ ['k1' => new \DateTime('2000-01-02 03:04:05'), 'k2' => ['a', 'b'], 'k3' => ['a' => 'b', 'c' => 'd']], ['k1' => 1, 'k2' => -2.34, 'k3' => "test\ttest\rtest\ntest"], 'this_will_be_skipped', ['k1' => '"v3_1', 'k2' => new FakeStringable(), 'k3' => new FakeJsonSerializable()], ]; $s = new CsvWriter())->generate($items); /* k1,k2,k3 2000-01-02 03:04:05,"[""a"",""b""]","{""a"":""b"",""c"":""d""}" 1,-2.34,test\\ttest\\rtest\\ntest """v3_1",fakestringable,{"k":"v"} */
它尝试避免引号(用 "
包围),但如果有需要则使用引号。
默认情况下,它是“一项一行”。\t
、\r
、\n
被转义并适合一行。如果您需要多行,则使用 $csvWriter->setOneline(false)
。
如果您的项不是数组而是 JsonSerializable 对象或 JSON 行,那也行。如果您的对象需要特殊的序列化逻辑,则传递 $normalizeFunction
参数 - 可调用函数,将您的对象转换为数组。
查看 tests
获取更多示例。还可以查看 src
- 逻辑相当简单。