PHPackages                             kedrigern/data-table - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. kedrigern/data-table

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

kedrigern/data-table
====================

Manipulation with table organized collection of data (csv, excel). Contains functions for work with whole columns, rows, filtering etc.

v1.0(11y ago)321BSD-3-ClausePHPPHP &gt;=5.3.0

Since Jul 19Pushed 9y ago1 watchersCompare

[ Source](https://github.com/Kedrigern/data-table)[ Packagist](https://packagist.org/packages/kedrigern/data-table)[ Docs](https://github.com/Kedrigern/data-table)[ RSS](/packages/kedrigern-data-table/feed)WikiDiscussions master Synced 6d ago

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

\#Data table

For robust manipulation with table organized collection of data (excel, csv tables).

Provide ability to work with whole rows and columns, call callbacks, resort, rename, filter. Include few predefined callbacks. See examples.

Import csv and array. Export to plain array, text, html, csv. Export is suitable for DB frameworks (`Nette\Database`).

[![Build Status](https://camo.githubusercontent.com/bbf7bc3e13dd5a1fda6e7dfc073b648a579efe153c06940d6026a9a66bc32ed4/68747470733a2f2f7472617669732d63692e6f72672f4b656472696765726e2f646174612d7461626c652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/Kedrigern/data-table)

\##Install

The best way how to install is use [Composer](https://getcomposer.org/):

```
php composer.phar require kedrigern/data-table

```

Run tests: `vendor/bin/tester -c test/ test/`

\##Examples

Suppose:

```
$table = new \Kedrigern\DataTable\RecordTable();
```

```
$table->loadFromArray(array(
	array("Name", "Surname", "Age"),
	array("Jane", "Roe", 29),
	array("John", "Doe", 30)
));
$table->useFirstRowAsHeader();

// Sum the ages = 59
$ageSum = $table->colSum("Age");

$table->sortByCol("Surname");
$table->callToCol("Surname", 'strtoupper');

$newCol = range(1,$table->getRowsNum());
$table->appendCol($newCol, "Unique");

$newTable = $table->resortColsByNewHeader(array("Unique", "Surname", "Name"));
```

`$newTable` contains:

```
1 DOE John
2 ROE Jane

```

### CSV with header

[](#csv-with-header)

Very common issue when you have some data in csv with header and you need only subset:

```
$table->loadFromCsvFile(__DIR__ . '/../data/data4.csv');
$table->useFirstRowAsHeader();

$map = array(
	"Alpha" => "A",
	"Beta" => "B",
);

$table2 = $table->renameColumns($map);
```

Where `table2` contains column `Alpha` renamed to `A` and column `Beta` renamed to `B`. See [test](test/examples/readme2.phpt).

### Remove if

[](#remove-if)

Remove all rows with even number in first column:

```
$isEven = function($row) {
  return ($row[0] % 2) == 0;
};

$removed = $t->removeRowsIf($isEven);
```

In `removed` are number of modified rows.

### Parse datetime

[](#parse-datetime)

```
$table->loadFromArray(array(
	array("Name", "Surname", "Age", "Born", "Registered"),
	array("Jane", "Roe", 29, "1990-1-1", "2013-12-30 01:02:03"),
	array("John", "Doe", 30, "1990-1-1", "2014-12-30 01:02:03")
));
$table->useFirstRowAsHeader();

$func = array('\Kedrigern\DataTable\Callback','toDatetime');

$table->callToCol(3, $func, array('Y-m-d', 'M y'));
$table->callToCol(4, $func, array('Y-m-d H:i:s', 'U', 'Europe/London'));
```

Now `Born` seems: `["Jan 90", "Feb 91"]`, and registered: `["1388361723", "1419897723"]`

### Join and split columns

[](#join-and-split-columns)

```
$table->loadFromArray(array(
	array("Name", "Surname"),
	array("Jane", "Roe"),
	array("John", "Doe")
));

$table->joinCols(["Name", "Surname"], "Fullname");
```

In Fullname column you get: `["Jane Roe", "John Doe"]`.

Or opposite way:

```
$table->loadFromArray(array(
	array("Fullname"),
	array("Jane Roe"),
	array("John Doe")
));

$table->splitCol("Fullname", ["Name", "Surname"]);
```

### Callbacks

[](#callbacks)

Predefined callbacks:

- join
- joinWith
- split
- toDatetime
- isEven
- isOdd
- allowValues
- disallowValues
- unicodeTrim

\##Author and contact

- [Ondřej Profant](https://github.com/Kedrigern), 2014
- [issues](https://github.com/Kedrigern/data-table/issues)

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity62

Established project with proven stability

 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 ~9 days

Total

6

Last Release

4272d ago

Major Versions

v0.9 → v1.02014-09-05

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/785900?v=4)[Ondřej Profant](/maintainers/Kedrigern)[@Kedrigern](https://github.com/Kedrigern)

---

Top Contributors

[![Kedrigern](https://avatars.githubusercontent.com/u/785900?v=4)](https://github.com/Kedrigern "Kedrigern (31 commits)")

---

Tags

arraydatacsvspreadsheettablecolumnrow

### Embed Badge

![Health badge](/badges/kedrigern-data-table/health.svg)

```
[![Health](https://phpackages.com/badges/kedrigern-data-table/health.svg)](https://phpackages.com/packages/kedrigern-data-table)
```

###  Alternatives

[jbzoo/data

An extended version of the ArrayObject object for working with system settings or just for working with data arrays

891.6M23](/packages/jbzoo-data)[graze/data-structure

Data collections and containers

12287.4k8](/packages/graze-data-structure)[hi-folks/data-block

Data class for managing nested arrays and JSON data.

1472.2k](/packages/hi-folks-data-block)[iteks/laravel-enum

A comprehensive Laravel package providing enhanced enum functionalities, including attribute handling, select array conversions, and fluent facade interactions for robust enum management in Laravel applications.

2516.7k](/packages/iteks-laravel-enum)[michaels/data-manager

Simple data manager for nested data, dot notation array access, extendability, and container interoperability.

121.9k2](/packages/michaels-data-manager)

PHPackages © 2026

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