给你个页面,也许有参考价值http://lydsgw.com/fyw/vmljdjc/shili/old_ajmd.htm

解决方案 »

  1.   

    也不算太麻烦
    <?
    $n = 9;
    $m = ceil(sqrt($n));
    if($m%2 == 0)
      $m++;$ar = array_fill(0,$m,array_fill(0,$m,''));
    $dr = 0;
    $dc = 1;
    $x = floor($m/2);
    $y = floor($m/2);
    $k = 0;
    for($i=0;$i<$n;$i++) {
      $ar[$y][$x] = $i+1;
      switch($k) {
        case 0:
          $x++;
          if($ar[$y+1][$x] === '')
            $k = ($k+1)%4;
          break;
        case 1:
          $y++;
          if($ar[$y][$x-1] === '')
            $k = ($k+1)%4;
          break;
        case 2:
          $x--;
          if($ar[$y-1][$x] === '')
            $k = ($k+1)%4;
          break;
        case 3:
          $y--;
          if($ar[$y][$x+1] == '')
            $k = ($k+1)%4;
          break;
      }
    }
    for($i=0;$i<$m;$i++) {
      for($j=0;$j<$m;$j++)
        printf("%4s",$ar[$i][$j]);
      echo "\n";

    ?>