| 
<?php
 include __DIR__ . "/../src/matrix.php";
 
 use divengine\matrix;
 
 $F_AMOUNT = fn($r, $c, matrix $m) => $m->{$r + .1} * $m->{$r + .2};
 $F_TOTAL = fn ($r, $c, matrix $m) => array_sum($m->vertical($c, 1, $r - 1));
 $F_CUMUL = fn ($r, $c, matrix $m) => $r == 1 ? $m->get($r, $c - 1)
 : $m->get($r - 1, $c) + $m->get($r, $c - 1);
 $table = new matrix([
 ["Product", "Price", "Count"],
 ["Apple", 10, 2],
 ["Banana", 35, 3],
 ["Orange", 6, 10],
 ]);
 
 $table->addColumn();
 
 echo $table . "\n";
 $table->{0.3} = "Amount";
 echo $table . "\n";
 
 // Fill the column with the product of the previous two columns
 $table->fillVertical(3, 1, 3, $F_AMOUNT);
 
 // Add a row with the sum of the previous rows
 $table->addRow(["Total", "", "", $F_TOTAL]);
 echo $table . "\n";
 
 // Add a column with the sum of the previous columns
 $table->addColumn();
 $table->{0.4} = "Cumul";
 
 // Fill the column with the sum of the previous column
 $table->fillVertical(4, 1, 3, $F_CUMUL);
 echo $table . "\n";
 
 // Change a value of the second row
 $table->{1.1} = 20;
 echo $table . "\n";
 
 // Remove the second row
 $table->removeRow(1);
 echo $table . "\n";
 
 // Show ranges
 print_r($table->vertical(1, 1, 2));
 print_r($table->horizontal(1, 1, 2));
 print_r($table->range(1, 1, 2, 2));
 echo "\n";
 
 // Serialize
 echo $table->format('serialize');
 
 
 |