php写环形数字表格

PHP cooljun 424℃ 0评论

贴出源码:

<?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++;
}

?>

运行效果图:

php写环形数组表格 - cooljun - cooljun的博客php写环形数组表格 - cooljun - cooljun的博客php写环形数组表格 - cooljun - cooljun的博客

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

如果你觉得这篇文章对你有帮助,请支持我继续更新网站 !捐赠本站
喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址