PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.10.8
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.10.8
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 3.10.4 All 148 releases
visualizer / vendor / markbaker / matrix / classes / src / Operators / DirectSum.php

DirectSum.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.10.8, at vendor/markbaker/matrix/classes/src/Operators/DirectSum.php

65 lines 1.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Matrix\Operators;
4
5 use Matrix\Matrix;
6 use Matrix\Exception;
7
8 class DirectSum extends Operator
9 {
10 /**
11 * Execute the addition
12 *
13 * @param mixed $value The matrix or numeric value to add to the current base value
14 * @return $this The operation object, allowing multiple additions to be chained
15 * @throws Exception If the provided argument is not appropriate for the operation
16 */
17 public function execute($value)
18 {
19 if (is_array($value)) {
20 $value = new Matrix($value);
21 }
22
23 if ($value instanceof Matrix) {
24 return $this->directSumMatrix($value);
25 }
26
27 throw new Exception('Invalid argument for addition');
28 }
29
30 /**
31 * Execute the direct sum for a matrix
32 *
33 * @param Matrix $value The numeric value to concatenate/direct sum with the current base value
34 * @return $this The operation object, allowing multiple additions to be chained
35 **/
36 private function directSumMatrix($value)
37 {
38 $originalColumnCount = count($this->matrix[0]);
39 $originalRowCount = count($this->matrix);
40 $valColumnCount = $value->columns;
41 $valRowCount = $value->rows;
42 $value = $value->toArray();
43
44 for ($row = 0; $row < $this->rows; ++$row) {
45 $this->matrix[$row] = array_merge($this->matrix[$row], array_fill(0, $valColumnCount, 0));
46 }
47
48 $this->matrix = array_merge(
49 $this->matrix,
50 array_fill(0, $valRowCount, array_fill(0, $originalColumnCount, 0))
51 );
52
53 for ($row = $originalRowCount; $row < $originalRowCount + $valRowCount; ++$row) {
54 array_splice(
55 $this->matrix[$row],
56 $originalColumnCount,
57 $valColumnCount,
58 $value[$row - $originalRowCount]
59 );
60 }
61
62 return $this;
63 }
64 }
65