贴出源码:
<?php 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 '<table border=1 style="border-collapse:collapse">'; foreach ($data as $k => $v) { echo '<tr>'; ksort($v); foreach ($v as $sk => $sv) { echo '<td style="padding:5px;">' . $sv . '</td>'; } echo '</tr>'; } echo '</table>'; } 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++; } ?>
运行效果图:



转载请注明:cooljun小窝 » php写环形数字表格