| 
<?php
 include __DIR__ . "/../src/matrix.php";
 
 use divengine\matrix;
 
 $F_AMOUNT = fn($row, $col, $matrix) => $matrix->get($row, $col - 2) * $matrix->get($row, $col - 1);
 $F_TOTAL = fn($row, $col, $matrix) => array_sum($matrix->vertical($col, 1, $row - 1));
 $F_AVG = fn($row, $col, $matrix) => number_format($F_TOTAL($row, $col, $matrix) / ($row - 1), 1);
 $F_BOTTOM_RIGHT = fn(matrix $matrix) => $matrix->get($matrix->getTotalRows() - 1, $matrix->getTotalColumns() - 1);
 
 // sheet of products
 $products = new matrix([
 /*  0         1         2           3    */
 /* 0 */ ["Product", "Price",  "Count",   "Amount"],
 //----------------------------------------
 /* 1 */ ["Apple",         5,        2,  $F_AMOUNT],
 /* 2 */ ["Banana",        6,        3,  $F_AMOUNT],
 /* 3 */ ["Orange",        6,       10,  $F_AMOUNT],
 //-----------------------------------------
 /* 4 */ ["Totals",  $F_AVG,  $F_TOTAL,   $F_TOTAL]
 ]);
 
 // sheet of services
 $services = new matrix([
 /*  0          1         2           3    */
 /* 0 */ ["Service",  "Price",  "Count",    "Amount"],
 //-----------------------------------------
 /* 1 */ ["Clean",         10,        2,   $F_AMOUNT],
 /* 2 */ ["Paint",         35,        3,   $F_AMOUNT],
 /* 3 */ ["Repair",         6,       10,   $F_AMOUNT],
 //------------------------------------------
 /* 4 */ ["Totals", $F_AVG,   $F_TOTAL,     $F_TOTAL]
 ]);
 
 $T_PRODUCTS = fn() => $F_BOTTOM_RIGHT($products);
 $T_SERVICES = fn() => $F_BOTTOM_RIGHT($services);
 
 // sheet of earnings
 $earnings = new matrix([
 ["\t",           "Amount"],
 //------------------------
 ["Products",  $T_PRODUCTS],
 ["Services",  $T_SERVICES],
 //------------------------
 ["Earnings",     $F_TOTAL]
 ]);
 
 echo $products->formatTXT(true);
 echo "\n";
 echo $services->formatTXT(true);
 echo "\n";
 echo $earnings->formatTXT(true);
 echo "\n";
 
 $products->set(1, 1, 10); // $earnings will be updated automatically
 
 echo $products->formatTXT(true);
 echo "\n";
 echo $earnings->formatTXT(true);
 echo "\n";
 |