A 2D array wrapper with methods for operating on, importing & exporting tabular data
This project is maintained by smrtr
Smrtr DataGrid comes with some methods to help you iterate over the grid and also perform filtering. These methods are essentially helpers that use callbacks, making it very easy to act on the grid data.
$callback: The following methods accept a
$callbackparameter. You can provide an anonymous function, a named function or a method so long as the parameter is callable according to is_callable.
There are two ways to iterate over the grid: row-wise or column-wise. Methods are provided for both.
$callback, $returnVectorObject = false )Iterates over the grid’s rows and executes the callback function on each row.
The key (int), the label (null or string) and the row data are passed to the callback function:
$key, $label, $row )The $row parameter is passed as an array by default.
<?php
$grid = new \Smrtr\DataGrid(array(
array(1, 4, 7),
array(2, 5, 8),
array(3, 6, 9)
));
$rowSums = array();
$grid->eachRow(function($key, $label, $row) use (&$rowSums) {
$rowSums[] = $row[0] + $row[1] + $row[2];
});
print_r($rowSums);
// [ 12, 15, 18 ]
Set $returnVectorObject to true to pass $row as a \Smrtr\DataGridVector instance.
\Smrtr\DataGridVector objects:<?php
$grid = new \Smrtr\DataGrid(array(
array(1, 4, 7),
array(2, 5, 8),
array(3, 6, 9)
));
$grid->rowLabels(array("r0", "r1", "r2"));
$grid->columnLabels(array("A", "B", "C"));
$grid->eachRow(function($key, $label, $row) {
$rowSum = $row['A'] + $row['B'] + $row['C'];
echo PHP_EOL."$label total: ".$rowSum;
}, true);
// r0 total: 12
// r1 total: 15
// r2 total: 18
$callback, $returnVectorObject=false )Iterates over the grid’s columns and executes the callback function on each column.
The key (int), the label (null or string) and the column data are passed to the callback function:
$key, $label, $column )The $column parameter is passed as an array by default.
<?php
$grid = new Smrtr_DataGrid(array(
array(1, 4, 7),
array(2, 5, 8),
array(3, 6, 9)
));
$columnSums = array();
$grid->eachColumn(function($key, $label, $col) use (&$columnSums) {
$columnSums[] = $col[0] + $col[1] + $col[2];
});
print_r($columnSums);
// [ 6, 15, 24 ]
Set $returnVectorObject to true to pass $column as a \Smrtr\DataGridVector instance.
\Smrtr\DataGridVector objects:<?php
$grid = new \Smrtr\DataGrid(array(
array(1, 4, 7),
array(2, 5, 8),
array(3, 6, 9)
));
$grid->rowLabels(array("r0", "r1", "r2"));
$grid->columnLabels(array("A", "B", "C"));
$grid->eachColumn(function($key, $label, $c) {
$columnSum = $c['r0'] + $c['r1'] + $c['r2'];
echo PHP_EOL."$label total: ".$columnSum;
}, true);
// A total: 6
// B total: 15
// C total: 24
The filter functions accept a callback which this determines which vectors to keep and which vectors to discard from the result. The return value of the callback function is evaluated to true or false. Returning true keeps the vector while returning false discards it.
$callback, $returnVectorObject = false )Iterates over the grid’s rows and executes the callback function on each row. The return value of the callback function determines whether to keep the row (return true) or discard it (return false).
The key (int), the label (null or string) and the row data are passed to the callback function:
$key, $label, $row )The $row parameter is passed as an array by default.
<?php
function row_sum_is_odd( $key, $label, $vector ) {
$total = 0;
foreach ($vector as $x)
$total += $x;
return $total % 2;
}
$grid = new \Smrtr\DataGrid(array(
array(2, 4, 3),
array(3, 5, 8),
array(3, 6, 6)
));
print_r($grid->filterRows('row_sum_is_odd')->getRowKeys());
// [ 0, 2 ]
Set $returnVectorObject to true to pass $row as a \Smrtr\DataGridVector instance.
\Smrtr\DataGridVector objects:<?php
function vals_are_distinct($key, $label, $vector) {
return count($vector->getDistinct()) == $vector->grid()->info('rows');
}
$grid = new \Smrtr\DataGrid(array(
array(23, 23, "34"),
array("foo", 53, 38),
array(377, 64, "0x98")
));
print_r($grid->filterRows('vals_are_distinct', true)->getRowKeys());
// [ 1, 2 ]
$callback, $returnVectorObject = false )Iterates over the grid’s columns and executes the callback function on each column. The return value of the callback function determines whether to keep the column (return true) or discard it (return false).
The key (int), the label (null or string) and the column data are passed to the callback function:
$key, $label, $column )The $column parameter is passed as an array by default.
<?php
$grid = new \Smrtr\DataGrid(array(
array(21, 92, 3),
array(65, 5, 88),
array(10, 12, 6)
));
echo "cols: " . $grid->filterColumns(function($key, $label, $column) {
return false;
})->info('columns');
// "cols: 0"
Set $returnVectorObject to true to pass $column as a \Smrtr\DataGridVector instance.
\Smrtr\DataGridVector objects:<?php
$grid = new \Smrtr\DataGrid(array(
array("john", "john", "jon"),
array("wayne", "barnes", "tickle")
));
$result = $grid->filterColumns(function($k, $l, $c) {
return in_array("john", $c);
}, true);
print_r($result->getArray());
// [ [ "john", "john" ], [ "wayne", "barnes" ] ]