如何用PHP循环生成分子1-345、分母1-9的分数序列?
解决PHP生成分数序列的问题
首先看你原来的代码,问题出在这几个地方:
- 内层循环结束后,
$i1的值会变成$end1 + 1(也就是10),所以你外层循环里拼接的$i.'/'.$i1其实都是$i/10,完全没用到内层循环里的分母1-9 - 你把内层循环的
$i1存到了$tweedearray里,但这个变量根本没在后续使用,等于白存了
要实现你要的效果,应该在外层循环遍历分子(1到345),内层循环遍历分母(1到9),每次在内层循环里把当前的分数拼接到结果里,而不是等内层循环结束再拼。
下面是修正后的代码:
$startNum = 1; // 起始分子 $endNum = 345; // 结束分子 $startDen = 1; // 起始分母 $endDen = 9; // 结束分母 $result = ''; // 外层循环:遍历分子 for ($num = $startNum; $num <= $endNum; $num++) { // 内层循环:遍历分母 for ($den = $startDen; $den <= $endDen; $den++) { // 把当前分数拼到结果里,用空格分隔 $result .= "$num/$den "; } } // 输出结果,最后可以去掉多余的空格 echo rtrim($result);
如果希望每个分子对应的分数单独占一行,可以稍微修改内层循环的拼接逻辑:
$startNum = 1; $endNum = 345; $startDen = 1; $endDen = 9; $result = ''; for ($num = $startNum; $num <= $endNum; $num++) { $line = ''; for ($den = $startDen; $den <= $endDen; $den++) { $line .= "$num/$den "; } // 每行结尾去掉空格,加换行符 $result .= rtrim($line) . '<br>'; } echo $result;
这样就能得到你想要的:1/1 1/2 ... 1/9 2/1 2/2 ... 2/9 ... 345/1 ... 345/9 的序列啦。
内容的提问来源于stack exchange,提问作者twan




