kedrigern / data-table
对组织好的数据表(csv,excel)进行操作。包含处理整个列、行、过滤等功能。
v1.0
2014-09-05 21:22 UTC
Requires
- php: >=5.3.0
- rhumsaa/array_column: ~1.1
Requires (Dev)
- nette/tester: ~1.2.0
Replaces
- kedrigern/data-table: v1.0
README
#数据表
用于对组织好的数据表(excel,csv表格)进行稳健操作。
提供操作整个行和列的能力,调用回调函数,重新排序,重命名,过滤。包括一些预定义的回调函数。请参见示例。
导入csv和数组。导出为纯数组,文本,html,csv。导出适合数据库框架(Nette\Database
)。
##安装
安装的最佳方式是使用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
##作者和联系方式
- Ondřej Profant, 2014
- 问题