$num=10;$arr=foo($num);$arr=array_reverse($arr);for($i=0;$i<$num;$i++){echo$arr[$i].PHP_EOL;echo'
';}functionfoo($num){//填入map$data=newstdClass();$data->x=1;$data->y=1;$data->num=$num;$data->len=$num*$num;$data->tmp_data=[];$data->rate=1;//方向$data->struct=create_struct($num);for($i=$data->len;$i>=1;$i--){$data->i=$i;$key=change_key($data);$data->tmp_data[$key]=$i;unset($data->struct[$key]);}//根据y坐标分组$data->struct=create_struct($num);foreach($data->tmp_dataas$key=>$value){$data->struct[$key]=$value;}for($i=1;$i<=$data->num;$i++){$start=($i-1)*$data->num;$end=$data->num;$slice=array_slice($data->struct,$start,$end);$data->slice[]='['.implode(",",$slice).']';}return$data->slice;}functionchange_key($data){//检查键$key=$data->x.','.$data->y;if(isset($data->struct[$key])){return$key;}switch($data->rate){case1://left$data->tmp_x=$data->x+1;$key=$data->tmp_x.','.$data->y;如果(isset($data->struct[$key])){$data->x=$data->tmp_x;返回$键;}else{$data->rate=2;$数据->y=$数据->y+1;}休息;case2://down$data->tmp_y=$data->y+1;$key=$data->x.','.$data->tmp_y;如果(isset($data->struct[$key])){$data->y=$data->tmp_y;返回$键;}else{$data->rate=3;}休息;case3://右$data->tmp_x=$data->x-1;$key=$data->tmp_x.','.$data->y;如果(isset($data->struct[$key])){$data->x=$data->tmp_x;返回$键;}else{$data->rate=4;}休息;案例4://up$data->tmp_y=$data->y-1;$key=$data->x.','.$data->tmp_y;如果(isset($data->struct[$key])){$data->y=$data->tmp_y;返回$键;}else{$data->rate=1;}break;}returnchange_key($data);}functioncreate_struct($num){$struct=[];for($i=1;$i<=$num;$i++){//套套for($m=1;$m<=$num;$m++){$key=$m.','。$我;$struct[$key]='';}}return$struct;}functiondump($data){echo'
';print_r($data);echo'';echo'
';}输出结果[73,74,75,76,77,78,79,80,81,82][72,43,44,45,46,47,48,49,50,83][71,42,21,22,23,24,25,26,51,84][70,41,20,7,8,9,10,27,52,85][69,40,19,6,1,2,11,28,53,86][68,39,18,5,4,3,12,29,54,87][67,38,17,16,15,14,13,30,55,88][66,37,36,35,34,33,32,31,56,89][65,64,63,62,61,60,59,58,57,90][100,99,98,97,96,95,94,93,92,91]