You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:46