| <?php | 
|   | 
| include "../Matrix.php"; | 
|   | 
| /** | 
| * Tiling of matrix X in [rowWise by colWise] dimension. Tiling | 
| * creates a larger matrix than the original data X. Example, if | 
| * X is to be tiled in a [3 x 4] manner, then: | 
| * | 
| *     /            \ | 
| *     | X  X  X  X | | 
| * C = | X  X  X  X | | 
| *     | X  X  X  X | | 
| *     \           / | 
| * | 
| * @param X Matrix | 
| * @param rowWise int | 
| * @param colWise int | 
| * @return Matrix | 
| */ | 
|   | 
| function tile(&$X, $rowWise, $colWise){ | 
|   | 
|   $xArray = $X->getArray(); | 
|   print_r($xArray); | 
|   | 
|   $countRow    = 0; | 
|   $countColumn = 0; | 
|   | 
|   $m = $X->getRowDimension(); | 
|   $n = $X->getColumnDimension(); | 
|   | 
|   if( $rowWise<1 || $colWise<1 ){ | 
|     die("tile : Array index is out-of-bound."); | 
|   } | 
|   | 
|   $newRowDim = $m*$rowWise; | 
|   $newColDim = $n*$colWise; | 
|   | 
|   $result = array(); | 
|   | 
|   for($i=0 ; $i<$newRowDim; ++$i) { | 
|   | 
|     $holder = array(); | 
|   | 
|     for($j=0 ; $j<$newColDim ; ++$j) { | 
|   | 
|       $holder[$j] = $xArray[$countRow][$countColumn++]; | 
|   | 
|       // reset the column-index to zero to avoid reference to out-of-bound index in xArray[][] | 
|   | 
|       if($countColumn == $n) { $countColumn = 0; } | 
|   | 
|     } // end for | 
|   | 
|     ++$countRow; | 
|   | 
|     // reset the row-index to zero to avoid reference to out-of-bound index in xArray[][] | 
|   | 
|     if($countRow == $m) { $countRow = 0; } | 
|   | 
|     $result[$i] = $holder; | 
|   | 
|   } // end for | 
|   | 
|   return new Matrix($result); | 
|   | 
| } | 
|   | 
|   | 
| $X =array(1,2,3,4,5,6,7,8,9); | 
| $nRow = 3; | 
| $nCol = 3; | 
| $tiled_matrix = tile(new Matrix($X), $nRow, $nCol); | 
| echo "<pre>"; | 
| print_r($tiled_matrix); | 
| echo "</pre>"; | 
| ?> |