alexskrypnyk/csvtable

PHP class to work with CSV as a table and export it as Markdown.

Fund package maintenance!
Patreon

0.3.0 2024-01-16 12:00 UTC

This package is auto-updated.

Last update: 2024-04-06 16:07:00 UTC


README

Yourproject logo

CsvTable

GitHub Issues GitHub Pull Requests Test codecov GitHub release (latest by date) LICENSE Renovate

PHP class to work with CSV as a table and export it as Markdown.

Features

  • Single-file class to manipulate CSV table.
  • Renderers for CSV and text table.
  • Ability to provide custom renderer.

Installation

composer require alexskrypnyk/csvtable

Usage

Given a CSV file with the following content:

col11,col12,col13
col21,col22,col23
col31,col32,col33      

From string

$csv = file_get_contents($csv_file);
// Render using the default renderer.
print (new CsvTable($csv))->render();

will produce identical CSV content by default:

col11,col12,col13
col21,col22,col23
col31,col32,col33      

From file

print (CsvTable::fromFile($file))->render();

will produce identical CSV content by default:

col11,col12,col13
col21,col22,col23
col31,col32,col33

Using CsvTable::renderTextTable() renderer

print (CsvTable::fromFile($file))->render([CsvTable::class, 'renderTextTable']);

will produce table content:

col11|col12|col13
-----------------
col21|col22|col23
col31|col32|col33     

Using CsvTable::renderTextTable() renderer with disabled header

print (CsvTable::fromFile($file))->noHeader()->render([CsvTable::class, 'renderTextTable']);

will produce table content:

col11|col12|col13
col21|col22|col23
col31|col32|col33     

Custom renderer from class

print (CsvTable::fromFile($file))->render(Markdown::class);

will produce Markdown content:

| col11 | col12 | col13 |
|-------|-------|-------|
| col21 | col22 | col23 |
| col31 | col32 | col33 |     

Custom renderer as a callback

print (CsvTable::fromFile($file))->render(function ($header, $rows, $options) {
  if (count($header) > 0) {
    $header = implode('|', $header);
    $header = $header . "\n" . str_repeat('-', strlen($header)) . "\n";
  }
  else {
    $header = '';
  }

  return $header . implode("\n", array_map(function ($row) {
    return implode('|', $row);
  }, $rows));
});

will produce CSV content:

col11|col12|col13
-----------------
col21|col22|col23
col31|col32|col33     

Maintenance

composer install
composer lint
composer test