if(isset($_GET['n']))
$n = isset($_GET['n'])?intval($_GET['n']):0; // 改变n的值 n >= 2 的整数, (1也行 ,但是1没啥用)
num_circle($n);
// var_dump($data);
function num_circle($n=0){
$n = empty($n) ? 4 : $n;
$num = 1;
$end = $n * $n;
$data = array();
$data[0][0] = $num++;
walk($num, $end, $n, 0, 0, 0, $data);
echo '
foreach ($data as $k => $v) {
echo '
';ksort($v);
foreach ($v as $sk => $sv) {
echo '
' . $sv . '';}
echo '
';}
echo '
';}
function walk(&$num, $max, $n, $x, $y, $c, &$data)
{
if ($num > $max) {
return false;
}
$c = $c % 4;
switch ($c) {
case 0:
// echo $x . ':' . $y, "\n";
fill_1($num, $n, $x, $y, $data);
break;
case 1:
// echo $x . ':' . $y, "\n";
fill_2($num, $n, $x, $y, $data);
break;
case 2:
// echo $x . ':' . $y, "\n";
fill_3($num, $n, $x, $y, $data);
break;
case 3:
// echo $x . ':' . $y, "\n";
fill_4($num, $n, $x, $y, $data);
break;
}
$c++;
walk($num, $max, $n, $x, $y, $c, $data);
}
function fill_1(&$num, $n, &$x, &$y, &$data)
{
for ($y = $y + 1; $y < $n; $y++) {
if (isset($data[$x][$y])) {
break;
}
$data[$x][$y] = $num;
$num++;
}
$y--;
}
function fill_2(&$num, $n, &$x, &$y, &$data)
{
for ($x = $x + 1; $x < $n; $x++) {
if (isset($data[$x][$y])) {
break;
}
$data[$x][$y] = $num;
$num++;
}
$x--;
}
function fill_3(&$num, $n, &$x, &$y, &$data)
{
for ($y = $y - 1; $y >= 0; $y--) {
if (isset($data[$x][$y])) {
break;
}
$data[$x][$y] = $num;
$num++;
}
$y++;
}
function fill_4(&$num, $n, &$x, &$y, &$data)
{
for ($x = $x - 1; $x >= 0; $x--) {
if (isset($data[$x][$y])) {
break;
}
$data[$x][$y] = $num;
$num++;
}
$x++;
}
?>
运行效果图: