一道与 for 相关的字符串面试题
需求
分析
1.php字符串格式化输出补全
2.每组首列自然序列,后续行元素等差20(每组的行数)叠加
3.关键 计算组,行首部,及分组列等差元素,使用三个for循环嵌套
代码
先实现缩小规模,分组为2行3列,15个序列数的货物单号。
$str = "";
$end = 15;
$start = 1;
$g_rows = 3;
$g_lines = 2;
$prefix = "YX-HL-";
$width = strlen($end);
$groups = ceil($end / ($g_lines * $g_rows));
$space = str_pad(" ", strlen($prefix) + $width);
for ($g = 0; $g < $groups; $g++) {
// 组首部
$g_start = $start + $g * $g_lines * $g_rows;
for ($i = 0; $i < $g_lines; $i++) {
// 行首部
$line_start = $g_start + $i;
for ($j = 0; $j < $g_rows; $j++) {
// 列元素
$code = $line_start + $j * $g_lines;
// 拼接元素
if ($code > $end) {
if ($j == 0)
break 3;
$str .= $space;
} else {
// 编码补0
$str .= sprintf("%s%s", $prefix, str_pad($code, $width, "0", STR_PAD_LEFT));
}
// 元素留白
if ($j != ($g_rows - 1)) {
$str .= $space;
}
}
$str .= "\n";
}
$str .= "\n";
}
echo $str;
效果
D:\code-base\php\test>php "d:\code-base\php\test\for.php"
YX-HL-01 YX-HL-03 YX-HL-05
YX-HL-02 YX-HL-04 YX-HL-06
YX-HL-07 YX-HL-09 YX-HL-11
YX-HL-08 YX-HL-10 YX-HL-12
YX-HL-13 YX-HL-15
YX-HL-14
补充
实现10000需求,只需要将组行列数改为20,3,终止数$end值为10000即可。
YX-HL-09902 YX-HL-09922 YX-HL-09942
YX-HL-09903 YX-HL-09923 YX-HL-09943
YX-HL-09904 YX-HL-09924 YX-HL-09944
YX-HL-09905 YX-HL-09925 YX-HL-09945
YX-HL-09906 YX-HL-09926 YX-HL-09946
YX-HL-09907 YX-HL-09927 YX-HL-09947
YX-HL-09908 YX-HL-09928 YX-HL-09948
YX-HL-09909 YX-HL-09929 YX-HL-09949
YX-HL-09910 YX-HL-09930 YX-HL-09950
YX-HL-09911 YX-HL-09931 YX-HL-09951
YX-HL-09912 YX-HL-09932 YX-HL-09952
YX-HL-09913 YX-HL-09933 YX-HL-09953
YX-HL-09914 YX-HL-09934 YX-HL-09954
YX-HL-09915 YX-HL-09935 YX-HL-09955
YX-HL-09916 YX-HL-09936 YX-HL-09956
YX-HL-09917 YX-HL-09937 YX-HL-09957
YX-HL-09918 YX-HL-09938 YX-HL-09958
YX-HL-09919 YX-HL-09939 YX-HL-09959
YX-HL-09920 YX-HL-09940 YX-HL-09960
YX-HL-09961 YX-HL-09981
YX-HL-09962 YX-HL-09982
YX-HL-09963 YX-HL-09983
YX-HL-09964 YX-HL-09984
YX-HL-09965 YX-HL-09985
YX-HL-09966 YX-HL-09986
YX-HL-09967 YX-HL-09987
YX-HL-09968 YX-HL-09988
YX-HL-09969 YX-HL-09989
YX-HL-09970 YX-HL-09990
YX-HL-09971 YX-HL-09991
YX-HL-09972 YX-HL-09992
YX-HL-09973 YX-HL-09993
YX-HL-09974 YX-HL-09994
YX-HL-09975 YX-HL-09995
YX-HL-09976 YX-HL-09996
YX-HL-09977 YX-HL-09997
YX-HL-09978 YX-HL-09998
YX-HL-09979 YX-HL-09999
YX-HL-09980 YX-HL-10000
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: