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

优化CO₂费用计算代码:减少大量if分支的实现方案

优化大量IF分支的方案

问题背景

需要优化一段根据CO₂数值和燃料ID计算费用的代码,原代码包含大量IF分支。费用规则:

  • CO₂数值低于131时,费用为0
  • CO₂数值高于301时,按301对应的费用计算
  • 不同燃料ID对应不同的费用梯度

优化思路

观察原代码的费用数值,发现每10个CO₂区间的费用是基础值的整数倍:131-140区间的费用是1倍,141-150是2倍,直到301及以上为18倍。基于这个规律,我们可以通过「倍数计算+燃料分组」的方式简化代码,彻底消除大量硬编码的IF分支。

优化代码示例

<?php
$co2 = (int)$co2; // 从数据库获取CO₂数值,转为整数
$fuel_id = 8; // 从数据库获取燃料ID
$priceText = '';

if ($co2 >= 131) {
    // 计算当前CO₂对应的倍数:131-140为1,141-150为2...301及以上为18
    $baseOffset = max(0, $co2 - 130);
    $multiplier = min(ceil($baseOffset / 10), 18);
    
    // 定义燃料分组及对应基础单价
    $fuelGroups = [
        [
            'ids' => [2], // Diesel
            'basePrice' => 40.47
        ],
        [
            'ids' => [1, 5, 7, 8], // Petrol、Petrol/Hibrid等类型
            'basePrice' => 20.24
        ],
        [
            'ids' => [4, 8], // Petrol/Gas等类型
            'basePrice' => 18.21
        ]
    ];
    
    // 匹配燃料ID,计算对应费用
    foreach ($fuelGroups as $group) {
        if (in_array($fuel_id, $group['ids'])) {
            $currentPrice = number_format($group['basePrice'] * $multiplier, 2);
            $priceText .= $currentPrice . ' ';
        }
    }
    $priceText = trim($priceText);
}

// 输出结果
echo $co2 ? "Your co2 price is " . ($priceText ?: '0') . " $" : '';
?>

方案优势

  1. 代码极简:彻底移除数十个IF分支,逻辑一目了然
  2. 维护成本低:新增燃料类型或调整基础单价时,只需修改$fuelGroups数组
  3. 扩展性强:若后续CO₂区间规则调整,仅需修改倍数计算逻辑即可

替代方案:配置数组法(适合无规律价格)

如果后续费用规则不再有倍数规律,可以用配置数组存储所有区间的价格映射,直观且便于修改:

<?php
$co2 = (int)$co2;
$fuel_id = 8;
$priceText = '';

// 定义各CO₂区间的价格配置
$priceConfig = [
    131 => [2 => '40.47', 1 => '20.24', 5 => '20.24', 7 => '20.24', 8 => '20.24', 4 => '18.21'],
    141 => [2 => '80.94', 1 => '40.47', 5 => '40.47', 7 => '40.47', 8 => '40.47', 4 => '36.42'],
    // ... 补充中间区间的配置
    301 => [2 => '728.46', 1 => '364.23', 5 => '364.23', 7 => '364.23', 8 => '364.23', 4 => '327.81']
];

if ($co2 >= 131) {
    // 确定当前CO₂对应的区间
    $targetKey = 301;
    foreach (array_keys($priceConfig) as $key) {
        if ($co2 >= $key && $co2 < $key + 10) {
            $targetKey = $key;
            break;
        }
    }
    
    // 获取对应价格,处理fuel_id=8的特殊情况(原逻辑输出两个价格)
    if (isset($priceConfig[$targetKey][$fuel_id])) {
        $priceText = $priceConfig[$targetKey][$fuel_id];
        if ($fuel_id == 8) {
            $priceText .= ' ' . $priceConfig[$targetKey][4];
        }
    }
}

echo $co2 ? "Your co2 price is " . ($priceText ?: '0') . " $" : '';
?>

注意事项

原代码中fuel_id=8会同时触发两个IF分支,输出两个价格,若这是业务需求则保留,否则需调整分组逻辑避免重复输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:02:00