<?php header("Content-Type:text/html;charset=utf-8"); // 顺时针打印矩阵 // 随机生成数组,a[i,j]; $col = rand ( 0, 10 ); $row = rand ( 0, 10 ); $arr = array (); for($i = 0; $i < $col; $i ++) for($j = 0; $j < $row; $j ++) $arr [$i] [] = rand ( 0, 100 ); //输出矩形数组 function getEE($arr) { $col = count ( $arr ); $row = count ( $arr [0] ); $i=0; $j=0; for($j=0;$j<$col;$j++){ for($i=0;$i<$row;$i++){ echo $arr[$j][$i]." "; } echo "<br/>"; } } /* * 分析: 由一周为一个轮回。 如果刚好有偶数个周,数组高大于宽,则有$col/2次轮回,若宽大于高则 有$row/2个轮回。 如果未奇数个周,则有$len/2+1个周。 */ function Printarrayincircle($arr) { $col = count ( $arr ); $row = count ( $arr [0] ); $len = $col < $row ? $col : $row; for($i =0; $i < $len / 2; $i ++) { $x=$i+1; echo '第'.$x."圈:</br>"; Printnumberincircle ( $arr, $i ); } } /* * 一周共有四次判断 Printnumberincircle($start,$end,$direction); 第一次: 第二次: 第三次: 第四次: */ function Printnumberincircle($arr, $p) { $col = count ( $arr ); $row = count ( $arr [0] ); $len = $col < $row ? $col : $row; // 第一次:start:$row-$i+1;end:$col-1; for($i = 0; $i < $row - 2 * $p; $i ++) echo $arr [ $p ] [$p + $i] . " -"; echo "<br/>"; for($i = 0; $i < $col - 2 * $p - 1; $i ++) echo $arr [$p + $i + 1] [$row - $p - 1]. " -"; echo "<br/>"; if($p==floor($len/2) ) break; for($i = 0; $i < $row - 2 * $p - 1; $i ++) echo $arr [$col - $p - 1] [$row - $i - $p -2]. " -"; echo "<br/>"; for($i = 0; $i < $col - 2 * $p - 2; $i ++) echo $arr [$col - $i - $p-2] [$p]. " -"; echo "<br/>"; } getEE($arr); echo "<br/>"; Printarrayincircle ( $arr ); ?>
代码很难看,不知道为什么,希望高人指点一二。