PHP嵌套循环疑问:设置奇数9为何产生10次输出?
问题分析:为什么$number=9时代码输出10行(5组)?
首先,咱们一步步拆解你的代码执行逻辑,就能明白问题所在啦:
你的代码执行过程
- 你设置
$number = 9,然后计算$number2 = $number / 2,得到的是4.5(因为9是奇数,除以2会得到浮点数)。 - 外层
for循环的条件是$b <= $number2,其中$b是从0开始的整数,每次加1:- 当
$b取值为0、1、2、3、4时,$b <= 4.5的判断都是true,所以循环会执行5次。 - 当
$b增加到5时,5 <= 4.5不成立,循环就停止了。
- 当
- 每一次外层循环都会输出两行内容:一行倒序的
987654321,一行正序的123456789。5次循环下来,正好是10行,也就是你期望的「5组倒序与正序数字」。
为什么你会觉得结果不对?
你提到“运行结果总是出现10次循环输出”,大概率是把每行输出当成了一次循环。实际上外层循环只跑了5次,每次对应一组两行的输出,总输出行数10行,完全符合你的预期。
优化建议(避免浮点数比较隐患)
虽然当前代码运行结果是对的,但浮点数比较偶尔会有精度问题。如果想更稳妥,可以把$number2改成整数除法:
<?php $number = 9; // 用intdiv做整数除法,直接得到4 $number2 = intdiv($number, 2); // 或者用floor取整:$number2 = floor($number / 2); for ($b=0; $b<=$number2; $b++){ for ($i=$number; $i>=1; $i--){ echo $i; } echo "<br/>"; for ($a=1; $a<=$number; $a++) { echo $a; } echo "<br/>"; } ?>
这样$number2是整数4,外层循环依然执行5次,输出结果和之前完全一致,但彻底避免了浮点数比较的潜在风险。
如果你的实际运行结果真的是20行(10组),那可能是代码里的$number2被误写成了$number(比如$number2 = $number),可以检查一下变量赋值的部分哦。
内容的提问来源于stack exchange,提问作者Zakario Lesrahmanto
相关产品推荐
相关产品推荐

