Lesson 3
Submatrix Concatenation and Matrix Manipulation in PHP
Introduction

Hello, Explorer! This unit's exciting programming lesson will involve traversing the labyrinth of two-dimensional matrices. We're going to apply our PHP skills to combine submatrices from two different matrices, creating a new one. It appears to be quite a complex task, doesn't it? But don't fret. We'll go through this together, one step at a time, using PHP arrays as our primary structure for matrix handling.

Task Statement

Are you ready for the task? Here it is: Imagine having two different 2D arrays in PHP, $A and $B. Our job is to devise a PHP function — let's name it submatrixConcatenation() — which takes these two matrices as inputs, along with the coordinates specifying submatrices within $A and $B. This function is expected to stitch the two chosen submatrices together, forming a new one, $C. Notably, the submatrices from $A and $B should have the same number of rows, and in the final matrix $C, elements from $A's submatrix should be on the left and those from $B's submatrix on the right.

Let's visualize this with a couple of matrices.

Given the matrix $A as:

Plain text
1[[1, 2, 3, 4], 2 [5, 6, 7, 8], 3 [9, 10, 11, 12]]

and the matrix $B as:

Plain text
1[[11, 12, 13], 2 [14, 15, 16], 3 [17, 18, 19]]

If we select 2x2 submatrices from each (comprising the 2nd to 3rd rows and 2nd to 3rd columns from $A, and 1st to 2nd rows and 1st to 2nd columns from $B), their concatenation would look like:

Plain text
1[[6, 7, 11, 12], 2 [10, 11, 14, 15]]
Solution Building: Step 1

Our first step toward the solution is to extract submatrices from $A and $B from the given coordinates. For this, we'll use nested loops in PHP to get the rows and then the required columns from those rows:

php
1function submatrixConcatenation($matrixA, $matrixB, $submatrixCoords) { 2 $startRowA = $submatrixCoords[0][0]; 3 $endRowA = $submatrixCoords[0][1]; 4 $startColA = $submatrixCoords[0][2]; 5 $endColA = $submatrixCoords[0][3]; 6 $startRowB = $submatrixCoords[1][0]; 7 $endRowB = $submatrixCoords[1][1]; 8 $startColB = $submatrixCoords[1][2]; 9 $endColB = $submatrixCoords[1][3]; 10 11 $numRows = $endRowA - $startRowA + 1; 12 $numColsA = $endColA - $startColA + 1; 13 $numColsB = $endColB - $startColB + 1; 14 15 $submatrixA = []; 16 for ($i = 0; $i < $numRows; $i++) { 17 for ($j = 0; $j < $numColsA; $j++) { 18 $submatrixA[$i][$j] = $matrixA[$startRowA + $i - 1][$startColA + $j - 1]; 19 } 20 } 21 22 $submatrixB = []; 23 for ($i = 0; $i < $numRows; $i++) { 24 for ($j = 0; $j < $numColsB; $j++) { 25 $submatrixB[$i][$j] = $matrixB[$startRowB + $i - 1][$startColB + $j - 1]; 26 } 27 } 28 29 // At this point, we have extracted submatrices from matrixA and matrixB 30}
Solution Building: Step 2

Next, we need to stitch together these submatrices. We can achieve this by concatenating corresponding rows from both matrices into a new matrix. This can be done using loops in PHP:

php
1function submatrixConcatenation($matrixA, $matrixB, $submatrixCoords) { 2 $startRowA = $submatrixCoords[0][0]; 3 $endRowA = $submatrixCoords[0][1]; 4 $startColA = $submatrixCoords[0][2]; 5 $endColA = $submatrixCoords[0][3]; 6 $startRowB = $submatrixCoords[1][0]; 7 $endRowB = $submatrixCoords[1][1]; 8 $startColB = $submatrixCoords[1][2]; 9 $endColB = $submatrixCoords[1][3]; 10 11 $numRows = $endRowA - $startRowA + 1; 12 $numColsA = $endColA - $startColA + 1; 13 $numColsB = $endColB - $startColB + 1; 14 15 $submatrixA = []; 16 for ($i = 0; $i < $numRows; $i++) { 17 for ($j = 0; $j < $numColsA; $j++) { 18 $submatrixA[$i][$j] = $matrixA[$startRowA + $i - 1][$startColA + $j - 1]; 19 } 20 } 21 22 $submatrixB = []; 23 for ($i = 0; $i < $numRows; $i++) { 24 for ($j = 0; $j < $numColsB; $j++) { 25 $submatrixB[$i][$j] = $matrixB[$startRowB + $i - 1][$startColB + $j - 1]; 26 } 27 } 28 29 // The part for the concatenation process 30 $resultMatrix = []; 31 for ($i = 0; $i < $numRows; $i++) { 32 $resultMatrix[$i] = array_merge($submatrixA[$i], $submatrixB[$i]); 33 } 34 35 return $resultMatrix; 36} 37 38// Example usage 39$matrixA = [ 40 [1, 2, 3, 4], 41 [5, 6, 7, 8], 42 [9, 10, 11, 12] 43]; 44 45$matrixB = [ 46 [11, 12, 13], 47 [14, 15, 16], 48 [17, 18, 19] 49]; 50 51$submatrixCoords = [ 52 [2, 3, 2, 3], 53 [1, 2, 1, 2] 54]; 55 56$result = submatrixConcatenation($matrixA, $matrixB, $submatrixCoords); 57foreach ($result as $row) { 58 echo implode(' ', $row) . "\n"; 59} 60// 6 7 11 12 61// 10 11 14 15

There we go! We've combined submatrices from two matrices into one, provided they have the same number of rows.

Lesson Summary

Congratulations! You've tackled an elaborate matrix manipulation task in this unit. This required you to have a clear understanding of PHP's 2D arrays and nested loops. Through this exercise, not only have you honed your PHP proficiency, but you've also wrestled with the conceptual intricacies of submatrices.

Now, it's time for some hands-on practice! In the subsequent practice session, dive into more complex challenges that involve manipulating and working with multiple matrices. This lesson will be your handy guide as you explore similar problems. Keep practicing, and soon you'll be adept at solving matrix manipulation tasks. Happy coding!

Enjoy this lesson? Now it's time to practice with Cosmo!
Practice is how you turn knowledge into actual skills.