PHPackages                             luchaninov/csv-writer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. luchaninov/csv-writer

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

luchaninov/csv-writer
=====================

CSV/TSV file/string generator

1.0.1(3y ago)05.0k↓33.3%1MITPHPPHP &gt;=8.1

Since Nov 25Pushed 3y ago1 watchersCompare

[ Source](https://github.com/luchaninov/csv-writer)[ Packagist](https://packagist.org/packages/luchaninov/csv-writer)[ RSS](/packages/luchaninov-csv-writer/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (2)Versions (3)Used By (0)

CSV Writer
==========

[](#csv-writer)

Create CSV/TSV files/strings from arrays or objects

How to Install
--------------

[](#how-to-install)

Install the `luchaninov/csv-writer` package using [composer](http://getcomposer.org/):

```
$ composer require luchaninov/csv-writer
```

Basic Usage
-----------

[](#basic-usage)

You can convert named array to CSV or 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
*/
```

Need TSV? Change `CsvWriter` to `TsvWriter`.

Need to write to file?

```
(new \Luchaninov\CsvWriter\CsvWriter())->write($filename, $items);
```

It uses generators so almost no memory is used.

Advanced Usage
--------------

[](#advanced-usage)

Don't worry if you have non-strings as values. It will try to stringify them.

```
$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"}
*/
```

It tries to avoid quoting (surrounding by `"`) but does it if needed.

It is "one item - one line" by default. `\t`, `\r`, `\n` are escaped and fit to one line. If you need multiline then `$csvWriter->setOneline(false)`.

If your items are not arrays but JsonSerializable objects or JSON lines - that's ok. If your object needs special serialization logic then pass `$normalizeFunction` param - callable that converts your objects to array.

See `tests` for more examples. Also look at `src` - the logic is quite simple.

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

1261d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/df3e7060fb5777768e7bb133e98b1e7dfcc788f25fe6dc445acf7036da5c0c3e?d=identicon)[luchaninov](/maintainers/luchaninov)

---

Top Contributors

[![luchaninov](https://avatars.githubusercontent.com/u/3829796?v=4)](https://github.com/luchaninov "luchaninov (2 commits)")

---

Tags

generatorcsvwritertsv

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/luchaninov-csv-writer/health.svg)

```
[![Health](https://phpackages.com/badges/luchaninov-csv-writer/health.svg)](https://phpackages.com/packages/luchaninov-csv-writer)
```

###  Alternatives

[faisalman/simple-excel-php

Easily parse / convert / write between Microsoft Excel XML / CSV / TSV / HTML / JSON / etc formats

582599.4k1](/packages/faisalman-simple-excel-php)[shuchkin/simplexlsxgen

Export data to Excel XLSx file. PHP XLSX generator.

1.1k2.2M16](/packages/shuchkin-simplexlsxgen)[luchaninov/csv-file-loader

Load CSV &amp; TSV files and strings. Using generators to minimize memory usage

1134.9k](/packages/luchaninov-csv-file-loader)[csanquer/colibri-csv

Lightweight and performant CSV reader and writer library

16161.7k4](/packages/csanquer-colibri-csv)[initred/laravel-tabula

laravel-tabula is a tool for liberating data tables trapped inside PDF files for the Laravel framework.

1418.6k](/packages/initred-laravel-tabula)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
