maximal/tsv

Library for working with the tab-separated values format (TSV).

Installs: 412

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/maximal/tsv

v1.0 2025-09-21 20:02 UTC

This package is auto-updated.

Last update: 2025-09-21 20:06:15 UTC


README

This is a small PHP library for working with the tab-separated values format (TSV) without any dependencies.

Installation

Install the library via Composer:

composer require maximal/tsv

Usage

require_once __DIR__ . '/vendor/autoload.php';

use Maximal\Tsv\Tsv;

// Get TSV text for the given two-dimensional data table
$tsvString = Tsv::getTsv($dataTable);
// Every cell value in `Tsv::getTsv()` call will be cast to string using `(string)$value`.
// Make sure all values are castable, e.g. all the classes have `__toString()` methods.

// Get two-dimensional data table for the given TSV text
$table = Tsv::getTable($tsvString);

Value escaping

This library uses the most common special characters escaping:

Escape Sequence Character
\t tab
\r carriage return
\n line feed
\\ backslash

This works two-way: TSV → array → TSV conversion gives the initial TSV text.

Transitive Equivalence

Let’s review an example of chained table → TSV → table → TSV conversion:

// Initial two-dimensional data table
$dataTable = [[/* ... */], [/* ... */], /* ... */];
// $dataTable is `array<array<mixed>>`

// TSV text from the initial data
$tsv = Tsv::getTsv($dataTable);
// $tsv is `string`

// Data table taken back from resulting TSV text
$tableFromTsv = Tsv::getTable($tsv);
// $tableFromTsv is `list<list<string>>`

// TSV text again
$tsvFromTable = Tsv::getTsv($dataTable);
// $tsvFromTable is `string`

// `$tsv === $tsvFromTable` equality is guaranteed
// `$dataTable === $tsvFromTable` equality is NOT guaranteed

Here, $tsv text is guaranteed to be equal to $tsvFromTable: both are strings and similarly formatted.

However, $dataTable is not guaranteed to be equal to $tableFromTsv because the initial array can have various keys and different value types (array<array<mixed>>) while the resulting array is strictly a collection of list of strings (list<list<string>>).

Coding Style

PER-3T / PSR-12T (PHP’s standard PER-3 / PSR-12 with SmartTabs instead of spaces).

Author