| 
<?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>";
 ?>
 
 |