Tested with PHP 5.3.1
In an upcoming post (Sightlines, or: Drawing Virtual Lines in a Two-Dimensional PHP Array Using Bresenham’s Line Algorithm), I’ll explain why I need to scale/blow up an array to 10x it’s size. Until then, this code snippet might not seem so useful. But, most everything I have written thus far has been leading up to the aforementioned post, and this is certainly a part of it.
$width = 5; // the size of the x-axis of the original array
$height = 5; // and the y-axis
for ($y = 0; $y < $height; $y++) { // creates a 5x5 array...
for ($x = 0; $x < $width; $x++) { // ...and fills it with a checkerboard...
$array1[$x][$y] = (is_float(($x + $y) / 2)) ? 0 : 1; // ...of ones and zeroes
}
}
/* $array1 contents
[0] [1] [2] [3] [4]
[0] 1 0 1 0 1
[1] 0 1 0 1 0
[2] 1 0 1 0 1
[3] 0 1 0 1 0
[4] 1 0 1 0 1
*/
$multi = 2; // how much larger the array will be--in this case, 2x larger
$x_multi = 0; // keeps track of where we are on the x-axis
$y_multi = 0; // and the y-axis
for ($y = 0; $y < $height; $y++) { // runs through our orignial array
for ($x = 0; $x < $width; $x++) {
for ($row = 0; $row < $multi; $row++) { // setting up our new, larger array
for ($col = 0; $col < $multi; $col++) {
$array2[$col + $x_multi][$row + $y_multi] = $array1[$x][$y]; // populates the new array with the old array's values
}
}
$x_multi += $multi; // starting a new column
if ($x_multi >= (($width) * $multi)) $x_multi = 0; // if it's our last column, resets the column to 0...
}
$y_multi += $multi; // ...because we're starting a new row
}
/* $array2 contents
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
[0] 1 1 0 0 1 1 0 0 1 1
[1] 1 1 0 0 1 1 0 0 1 1
[2] 0 0 1 1 0 0 1 1 0 0
[3] 0 0 1 1 0 0 1 1 0 0
[4] 1 1 0 0 1 1 0 0 1 1
[5] 1 1 0 0 1 1 0 0 1 1
[6] 0 0 1 1 0 0 1 1 0 0
[7] 0 0 1 1 0 0 1 1 0 0
[8] 1 1 0 0 1 1 0 0 1 1
[9] 1 1 0 0 1 1 0 0 1 1
*/
Now we have an array that is twice as large as it was previously, and the values have scaled accordingly.
