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
相关产品推荐
相关产品推荐

