z型字串轉換(演算法)
阿新 • • 發佈:2019-02-04
<?php
header("Content-type:text/html;charset=utf-8");
/**
* 處理最小週期內的字串
* @author syh
* @param array $arr 最小處理陣列
* @param int $t_num 每個週期內字串個數
* @return array
*/
function fun($arr,$t_num)
{
// 如果不夠最小週期補空串
if (count($arr)<$t_num)
{
$arr_new=array_fill(0,$t_num-count($arr ), '');
$arr=array_merge($arr,$arr_new);
}
$i=0;
$list[$i]=array_shift($arr);
while (count($arr)>0)
{
$i++;
// 合併最小週期內同行內的字串
$list[$i]=array_shift($arr).array_pop($arr);
}
return $list;
}
/**
* 主程式
* @author syh
* @param string $str 字串
* @param string $rows 行數
* @return array
*/
function main($str,$rows)
{
$num=2*$rows-2;//每個週期裡的字元個數
$arr=array_chunk(str_split($str),$num);//分割陣列
for ($i=0; $i <=$rows; $i++)
{
foreach ($arr as $key => $value)
{
$list=fun($value,$num);
@$list_new [$i].=$list[$i];
}
}
return implode(' ',$list_new);
}
$str='abcdefghijklmnopqrstuvwxyz';
$str_new=main($str,4); //4行
var_dump($str_new);
?>