为何这段PHP代码片段输出特定值?求详细解析
PHP代码输出逻辑解析
原代码(判断条件$sum>20)
<?php $numbers=array(1,2,3,4,5,6,7,8,9,10); $sum=0; foreach($numbers as $number) { if($sum>20){ // break; continue; } $sum=$sum+$number; } echo $sum." " .$number; ?>
执行步骤拆解
我们逐次遍历数组元素,跟踪$sum和$number的变化:
- 初始状态:
$sum=0,$numbers数组元素为[1,2,3,4,5,6,7,8,9,10] - 遍历第一个元素
$number=1:$sum=0不大于20,执行$sum=0+1=1 - 遍历第二个元素
$number=2:$sum=1≤20,执行$sum=1+2=3 - 遍历第三个元素
$number=3:$sum=3≤20,执行$sum=3+3=6 - 遍历第四个元素
$number=4:$sum=6≤20,执行$sum=6+4=10 - 遍历第五个元素
$number=5:$sum=10≤20,执行$sum=10+5=15 - 遍历第六个元素
$number=6:$sum=15≤20,执行$sum=15+6=21 - 遍历第七个元素
$number=7:此时$sum=21>20,触发continue语句,跳过本次循环的$sum累加操作,直接进入下一次循环 - 遍历第八个元素
$number=8:$sum仍为21>20,触发continue,跳过累加 - 遍历第九个元素
$number=9:$sum仍为21>20,触发continue,跳过累加 - 遍历第十个元素
$number=10:$sum仍为21>20,触发continue,跳过累加
循环结束后,$sum的值停留在21;PHP的foreach循环结束后,$number变量会保留最后一次遍历的元素值(也就是10),所以最终输出为21 10。
修改判断条件为$sum>30后的执行逻辑
当判断条件改为$sum>30时,循环执行到:
- 遍历
$number=7时,$sum=21≤30,执行$sum=21+7=28 - 遍历
$number=8时,$sum=28≤30,执行$sum=28+8=36 - 后续遍历
$number=9和$number=10时,$sum=36>30,均触发continue跳过累加
循环结束后,$sum=36,$number=10,输出为36 10。你提到的“得到预期结果”,核心是此时$sum会累加至超过30,而continue只会跳过当前循环的累加,不会终止整个循环,必须遍历完所有数组元素才会结束。
补充说明
如果想要在$sum超过指定值时直接终止循环,而非跳过后续累加,应该把continue换成break。比如将判断里的continue改为break,当$sum>20时循环直接结束,此时$number会停留在6,输出为21 6。
内容的提问来源于stack exchange,提问作者vikas
相关产品推荐
相关产品推荐

