You need to enable JavaScript to run this app. 如何简化多组重复的if-elseif-else条件判断代码块
优惠活动
大模型
产品
解决方案
定价
更多

如何简化多组重复的if-elseif-else条件判断代码块

解决方案

你可以通过以下几种方式完全消除重复的if逻辑,同时适配不同的输出变量:

方案1:封装公共处理函数(最推荐,可维护性最高)

将重复的判断逻辑封装为独立函数,后续只需要调用函数即可生成对应变量:

// 先定义公共处理函数,后续逻辑修改只需要改这一处
function getCategoryScore($inputVal) {
    if ($inputVal == 'perfect') {
        return $GLOBALS['perfect'][1];
    } elseif ($inputVal == 'good') {
        return $GLOBALS['good'][1];
    } else {
        return $GLOBALS['bad'][1];
    }
}

// 直接调用生成对应变量,无需重复写if
$c1g = getCategoryScore($_POST['category_1']);
$c2g = getCategoryScore($_POST['category_2']);
// 更多分类同理,一行即可完成赋值

如果不想用全局变量,也可以把$perfect/$good/$bad作为参数传入函数:

function getCategoryScore($inputVal, $perfect, $good, $bad) {
    if ($inputVal == 'perfect') {
        return $perfect[1];
    } elseif ($inputVal == 'good') {
        return $good[1];
    } else {
        return $bad[1];
    }
}
// 调用时传入三个数组即可
$c1g = getCategoryScore($_POST['category_1'], $perfect, $good, $bad);

方案2:数组映射简写(适合轻量场景,无需定义函数)

用映射数组配合空合并运算符可以把单条赋值逻辑压缩到一行:

// 先定义映射关系
$scoreMap = [
    'perfect' => $perfect[1],
    'good' => $good[1]
];

// 一行完成赋值,不存在的键默认返回$bad[1]
$c1g = $scoreMap[$_POST['category_1']] ?? $bad[1];
$c2g = $scoreMap[$_POST['category_2']] ?? $bad[1];

方案3:批量循环处理(适合分类数量极多的场景)

如果你的分类参数category_N数量很多,还可以用循环批量生成结果,连变量定义都不需要重复写:

$cg = []; // 所有结果存到数组里,用$cg[1]对应原来的$c1g,$cg[2]对应$c2g,以此类推
$totalCategory = 10; // 替换为你实际的分类总数
$scoreMap = [
    'perfect' => $perfect[1],
    'good' => $good[1]
];
for ($i = 1; $i <= $totalCategory; $i++) {
    $input = $_POST["category_{$i}"] ?? '';
    $cg[$i] = $scoreMap[$input] ?? $bad[1];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 13:57:01