<?php
function render(
$num,
$strLength,
$result,
$hor,
$ver,
$currentNum,
$horisontal = true,
$reverse = false
) {
foreach(range(1, $strLength) as $b) {
if ($horisontal && !$reverse) {
$result[$ver][$hor] = $currentNum;
if ($b < $strLength) $hor++;
} elseif ($horisontal && $reverse) {
--$hor;
$result[$ver][$hor] = $currentNum;
} elseif (!$horisontal && $reverse) {
$ver--;
$result[$ver][$hor] = $currentNum;
if ($b === $strLength) $hor++;
} elseif (!$horisontal && !$reverse) {
$ver++;
$result[$ver][$hor] = $currentNum;
}
$currentNum++;
}
$reverseNext = $reverse;
if ($horisontal && !$reverse) {
$horisontalNext = false;
} elseif ($horisontal && $reverse) {
$horisontalNext = false;
} elseif (!$horisontal && $reverse) {
$horisontalNext = true;
$reverseNext = false;
} elseif (!$horisontal && !$reverse) {
$horisontalNext = true;
$reverseNext = true;
}
return ($currentNum > $num * $num)
? $result
: render(
$num,
($horisontal ? $strLength - 1 : $strLength),
$result,
$hor,
$ver,
$currentNum,
$horisontalNext,
$reverseNext
);
}
/*var_export(render(
5,
5,
[],
0,
0,
1
));*/
$num = 5;
$strLength = $num;
$result = [];
$hor = 0;
$ver = 0;
$currentNum = 1;
foreach (render($num, $strLength, $result, $hor, $ver, $currentNum) as $i) {
ksort($i);
$maxSymbLenght = strlen((string)($num*$num));
foreach ($i as $j) {
$symbLenght = strlen((string)$j);
$whiteSpace = 1;
if ($symbLenght < $maxSymbLenght) {
$whiteSpace = $maxSymbLenght - $symbLenght + 1;
}
echo str_repeat(' ', $whiteSpace) . $j;
}
echo "\n";
}