PHP中用foreach获取数组剩余值遇问题,求金额与剩余值正确计算方法
我来帮你梳理一下问题,你的代码里有几个关键错误导致结果不符合预期,我会一步步帮你修正并解释逻辑:
你的代码存在的问题
- 变量未初始化:你使用了
$v但没有提前声明赋值,第一次循环时$v处于未定义状态,直接参与计算会导致逻辑混乱 - 变量名拼写错误:
$amount = abs($val - $ret);里的$ret是笔误,应该是$return,这会让金额计算完全错误 - 逻辑不符合需求:你原有的判断逻辑和你期望的数值规则不匹配,需要重新梳理计算逻辑
修正后的代码
<?php $arr = [5000, 2000]; // 提前计算固定的sum值,用round()取整匹配你期望的整数结果 $sum = round((3000 * 10) / 9); foreach($arr as $val) { if($val > $sum) { // 数值超过sum时,金额取sum,剩余值为原数值减去sum $amount = $sum; $return = $val - $sum; } else { // 数值小于等于sum时,无计入金额,全部数值作为剩余返回 $amount = 0; $return = $val; } echo "Return : " . $return . " Amount : " . $amount . "<br>"; } ?>
代码逻辑说明
- 提前计算
$sum的值:因为它是固定常量,不需要在每次循环里重复计算,用round()取整后得到你期望的3333 - 遍历每个数值的判断逻辑:
- 当
$val大于$sum时,可计入的金额为$sum,剩余值是原数值减去$sum(比如5000-3333=1667) - 当
$val小于等于$sum时,没有可计入的金额(Amount=0),全部数值作为剩余返回(比如2000直接返回)
- 当
运行这段代码后,会得到你期望的输出:
Return : 1667 Amount : 3333
Return : 2000 Amount : 0
内容的提问来源于stack exchange,提问作者HameedR
相关产品推荐
相关产品推荐

