PHP打印环状数字圈

如题:
$i=[number];
打印如下的图形:

1  2  3  4
12 13 14 5
11 16 15 6
10 9  8  7

 

  1. /**   
  2.  * 二维数组排序   
  3.  * @param   array $array   
  4.  */    
  5. function sort_recursive(&$array){    
  6.     foreach($array as $key=>$edge){    
  7.         ksort($edge,true);    
  8.         $array[$key]=$edge;    
  9.     }    
  10.     ksort($array,true);    
  11. }    
  12.     
  13. /**   
  14.  * 生成一圈环状数字   
  15.  * @param   array $cotainer    二维数组,包含生成的圈   
  16.  * @param   int $start_value    该圈的起始值   
  17.  * @param   int $x    该圈的偏移值   
  18.  * @param   int $grids_edge    每条边的数字个数   
  19.  */    
  20. function generate(&$container,$start_value,$x,$grids_edge){    
  21.     $rec_times=ceil($grids_edge/2);    
  22.     $center=$grids_edge&1?false:$start_value+4*$rec_times*($rec_times+1);    
  23.     if($center){    
  24.         $index=$x+ceil($grids_edge/2);    
  25.         $container[$index][$index]=$center;    
  26.     }    
  27.     for($i=0;$i<$grids_edge;$i++){    
  28.         $right=$x+$grids_edge;    
  29.         $basevalue=$start_value+$i;    
  30.         $container[$x][$x+$i]=$base_value;    
  31.         $container[$x+$i][$right]=$grids_edge+$base_value;    
  32.         $container[$right][$right-$i]=$grids_edge*2+$base_value;    
  33.         $container[$right-$i][$x]=$grids_edge*3+$base_value;    
  34.     }    
  35. }    
  36.     
  37.     
  38. $container=array();    
  39. $data=array(    
  40.     1 =>array(1,6),    
  41.     25=>array(2,4),    
  42.     41=>array(3,2),    
  43. );    
  44. /*   
  45. $data=array(   
  46.     1 =>array(1,2),   
  47. );   
  48. $data=array(   
  49.     1 =>array(1,5),   
  50.     21=>array(2,3),   
  51.     33=>array(3,1),   
  52. );   
  53. $data=array(   
  54.     1 =>array(1,3),   
  55.     13=>array(2,1),   
  56. );   
  57. */    
  58. foreach($data as $key=>$val){    
  59.     generate($container,$key,$val[0],$val[1]);    
  60. }    
  61. sort_recursive($container);    
  62. $table='<table border=1>';    
  63. foreach($container as $key=>$edge){    
  64.     $table.='<tr>';    
  65.     foreach($edge as $val){    
  66.         $table.='<td>'.$val.'</td>';    
  67.     }    
  68.     $table.='</tr>';    
  69. }    
  70. $table.='</table>';    
  71. echo $table;