回旋函数写法与str_pad函数

所谓回旋数,就是下面这样

3的回旋数
1 2 3
8 9 4
7 6 5

5的回旋数
1 2 3 4 5   
16 17 18 19 6   
15 24 25 20 7   
14 23 22 21 8   
13 12 11 10 9  

输入n得到相应的回旋数


<?php


/*==============================================================
#      Program: Lamp learning
#     FileName: huixuan.php
#         Desc:
#       Author: pakey
#        Email: pakey@qq.com
#     HomePage: http://www.pakey.net
#      Version: 0.0.1
#   LastChange: 2012-04-29 11:21:52
#      History:
===============================================================*/
//输出指定行的回旋数
showHx(10);
/**
* [getHxArr 输出回旋数方针]
* @param  [integer] $num    [回旋数行数]
* @return
*/
function showHx($num){
    // 防止不同浏览器空格不兼容
    echo '<style>*{font-family:"宋体"}</style>';
    //
    echo '<pre>';
    $arr=getHxArr($num);
    $lenth=strlen($num*$num);
    for ($i=1; $i <=$num; $i++) {
        for ($j=1; $j <= $num; $j++) {
            echo str_pad($arr[$i][$j], $lenth,' ',STR_PAD_LEFT),'  ';
        }
        echo '<br /><br />';
    }
}
/**
* [getHxArr 产生回旋数数组]
* 回旋方向都是 左→右 上↓下 右←左 下↑上
* 主要在控制在每个方向走多少个数
* 以4为例 每次回旋处理数据数为 $hxnum_s=floor($hxnum)
* 4   3   3   2   2   1  
* 每次4-0.5 然后向下取整  $hxnum
* 4  3.5  3  2.5  2  1.5  
*
* @param  [integer] $num    [回旋数行数]
* @return [array]   $hxArr  [回旋数数组]
*/
function getHxArr($num){
    // 产生数组
    $hxArr=array();
    // 回旋方法 1 从做到右 2 从上到下  3 从右到左  4 从下到上
    $hxmethod=1;
    // x坐标
    $x=1;
    // y坐标
    $y=0;
    // 生成hxnum_s的中间量
    $hxnum=$num;
    // 当前行或者列处理数据数的指针 当和$hxnum_n==$hxnum_s时 切换旋转方向
    $hxnum_n=0;
    // 当前行或者列需要处理数据的总数 $hxnum_s=floor($hxnum)
    $hxnum_s=$hxnum;
    // 循环总数
    $sum=$num*$num;
    $i=1;
    while ($i <= $num*$num) {
        // 坐标处理
        switch ($hxmethod) {
            case '1':
                ++$y;    
                break;
            case '2';
                ++$x;
                break;
            case '3';
                --$y;
                break;
            case '4';
                --$x;
                break;            
        }
        // 为回旋数数组相应位置赋值
        $hxArr[$x][$y]=$i;
        // 判断采用何种方向
        ++$hxnum_n;
        if ($hxnum_n==$hxnum_s){
            // 指针清零
            $hxnum_n=0;
            $hxnum-=0.5;
            $hxnum_s=floor($hxnum);
            ++$hxmethod;
            if ($hxmethod>4){
                $hxmethod-=4;
            }
        }
        ++$i;
    }
    return $hxArr;
}
?>


str_pad函数用法

str_pad(string,length,pad_string,pad_type)
参数 描述
string 必需。规定要填充的字符串。
length 必需。规定新的字符串长度。如果该值小于字符串的原始长度,则不进行任何操作。
pad_string 可选。规定供填充使用的字符串。默认是空白。
pad_type

可选。规定填充字符串的哪边。

可能的值:

  • STR_PAD_BOTH - 填充字符串的两侧。如果不是偶数,则右侧获得额外的填充。
  • STR_PAD_LEFT - 填充字符串的左侧。
  • STR_PAD_RIGHT - 填充字符串的右侧。默认。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值