PHP中修改变量值后如何持久保存变量数值?
解决PHP循环中变量修改后无法保存的问题
嘿,我瞅出你代码里的问题啦——你把$nbrMatches这些变量的初始化放在了while循环的内部!这就意味着每次循环开始的时候,这些变量都会被重新赋值成初始值,之前做的修改全白搭了,难怪输出和预期不符。
问题根源拆解
看你原来的代码,每次进入while循环,都会执行:
$nbrMatches = -15; $one = -1; $two = -2; $three = -3;
第一次输入1后,你计算得到了14,但下一次循环时,$nbrMatches又被重置回-15了,所以输入3的时候,计算的是-3 - (-15)=12,而不是基于14的11,这就是实际输出和预期不一样的原因。
修复方案
把变量的初始化代码移到while循环外面,这样循环内部修改的数值就能被保留下来。另外,你的变量用负数计算有点绕,我调整成了更直观的正数逻辑,当然如果你坚持原来的负数写法,只要把初始化移出去也能行。
修改后的代码:
// 把变量初始化移到循环外,确保修改后的值能被持续保留 $nbrMatches = 15; $one = 1; $two = 2; $three = 3; while($user_choice = fgets(STDIN)) { // 处理输入,去掉换行符避免判断出错 $user_choice = trim($user_choice); if ($user_choice == 1) { echo $one . PHP_EOL; $nbrMatches -= $one; // 直接减去选择的数量,更新剩余值 echo $nbrMatches . " remaining." . PHP_EOL; } else if ($user_choice == 2) { echo $two . PHP_EOL; $nbrMatches -= $two; echo $nbrMatches . " remaining." . PHP_EOL; } else if ($user_choice == 3) { echo $three . PHP_EOL; $nbrMatches -= $three; echo $nbrMatches . " remaining." . PHP_EOL; } }
效果验证
现在运行代码,输入1后会输出1和14 remaining.,接着输入3会输出3和11 remaining.,完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者Margaret Osborn
相关产品推荐
相关产品推荐

