如何简化多组重复的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
相关产品推荐
相关产品推荐

