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

PHP如何实现两个数组按规则连续扣减生成目标数组

PHP实现数组连续扣减逻辑方案

实现代码

<?php
// 初始化测试数组
$a = [
    101 => 5,
    109 => 100,
    220 => 50,
    231 => 45,
    245 => 90
];
$b = [
    'PRO' => 12,
    'LOG' => 15,
    'DEV' => 100
];

// 计算总待抵扣额度(b数组所有值求和)
$totalDeduct = array_sum($b);
// 结果数组初始化为a的拷贝,保留原始键名
$c = $a;

// 逐元素扣减
foreach ($c as $key => $currentVal) {
    // 抵扣额度已用完,直接终止遍历,后续元素保留原值
    if ($totalDeduct <= 0) {
        break;
    }
    if ($currentVal <= $totalDeduct) {
        // 当前值不足以抵扣剩余额度,设为0,扣减对应总额度
        $c[$key] = 0;
        $totalDeduct -= $currentVal;
    } else {
        // 当前值足够抵扣剩余额度,扣减后总额度清零
        $c[$key] = $currentVal - $totalDeduct;
        $totalDeduct = 0;
    }
}

// 打印验证结果
print_r($c);
?>

逻辑说明

  • 连续抵扣的最终效果和按$b总额抵扣完全一致,不需要单独遍历$b的每个元素,代码更简洁高效
  • 结果数组直接拷贝$a的原始值和键名,保证未参与抵扣的元素完全保留原始值
  • 抵扣额度用完后直接终止遍历,避免无效循环

如果你有特殊业务要求,需要在$a总值不足以抵扣$b总额时做额外处理,可以在遍历结束后判断$totalDeduct是否大于0,自行补充对应逻辑即可。

运行上述代码输出结果和要求的目标数组完全一致:

Array
(
    [101] => 0
    [109] => 0
    [220] => 28
    [231] => 45
    [245] => 90
)

内容的提问来源于stack exchange,提问作者ngoCham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:02