kedrigern/data-table

对组织好的数据表(csv,excel)进行操作。包含处理整个列、行、过滤等功能。

v1.0 2014-09-05 21:22 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:59:56 UTC


README

#数据表

用于对组织好的数据表(excel,csv表格)进行稳健操作。

提供操作整个行和列的能力,调用回调函数,重新排序,重命名,过滤。包括一些预定义的回调函数。请参见示例。

导入csv和数组。导出为纯数组,文本,html,csv。导出适合数据库框架(Nette\Database)。

Build Status

##安装

安装的最佳方式是使用Composer

php composer.phar require kedrigern/data-table

运行测试:vendor/bin/tester -c test/ test/

##示例

假设

$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包含

1 DOE John
2 ROE Jane

带有标题的CSV

当你有一些带有标题的CSV数据,但只需要子集时,这是一个非常常见的问题

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

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

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

其中table2包含列Alpha重命名为A,列Beta重命名为B。请参见测试

移除

移除第一列中为偶数的所有行

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

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

removed中包含修改的行数。

解析日期时间

$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'));

现在Born看起来是:["Jan 90", "Feb 91"],注册时间是:["1388361723", "1419897723"]

合并和分割列

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

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

在Fullname列中,你得到:["Jane Roe", "John Doe"]

或相反的方式

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

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

回调函数

预定义的回调函数

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

##作者和联系方式