public function spliceColumns(int $offset, int $length = null, array $replacement = null) : self
{
if ($replacement) {
if ($this->getRowCount() !== count($replacement)) {
throw new MatrixException('Cannot splice [' . count($replacement) . '] row into matrix of [' . $this->getRowCount() . '] rows.');
}
if (!static::subArraysAreEqualSize($replacement)) {
throw new MatrixException('Cannot splice in new columns of unequal size.');
}
}
$rowIndex = 0;
$spliced = array_map(function (array $row) use($offset, $length, $replacement, &$rowIndex) {
array_splice($row, $offset, $length, $replacement ? $replacement[$rowIndex++] : null);
return $row;
}, $this->toArray());
return new static($spliced);
}
public function testSpliceUnevenColumns() { $matrix = new Matrix([[1, -1, 2], [4, 0, 6], [0, 1, -1]]); static::expectException(MatrixException::class); $matrix->spliceColumns(1, 1, [[8, 3], [5], [2]]); }