luchaninov/csv-writer

CSV/TSV 文件/字符串生成器

1.0.1 2022-11-25 22:26 UTC

This package is auto-updated.

Last update: 2024-09-26 02:39:13 UTC


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 - 逻辑相当简单。