如何精简含大量if判断的PHP代码?
精简重复if判断的PHP代码方案
当然有办法搞定这段重复的代码!你现在的写法全是机械重复的判断逻辑,我们可以通过数组+循环的方式彻底简化它,而且完全保留原有的功能。
方案一:变量名与表头文本一致时的简化
因为你的变量名和要输出的表头文本几乎完全对应(比如$CType对应表头CType ),我们可以把所有需要检查的变量名放进一个数组,然后循环处理:
// 把所有需要检查的变量名列在这里 $headerVars = [ 'CType', 'CNr', 'CValFrom', 'CValUntil', 'CLTCCNr', 'CLTCCTime', 'CIOEntryOff', 'CIOExitOff', 'CICoded', 'CCodingDate', 'CPrice', 'CPricePyed', 'CDeposit', 'CDepositPayed', 'CLastCCode', 'CLastLPlate', 'CIOOffNextUse', 'CLastEntryTime', 'CLastExitTime', 'CLastPTime' ]; foreach ($headerVars as $varName) { // 检查变量存在且不为NULL(和原代码的判断逻辑完全一致) if (isset($$varName) && $$varName !== NULL) { echo '<th align="right">' . $varName . ' </th>'; } }
这里用到了PHP的可变变量$$varName,它会自动把字符串$varName转换成对应的变量(比如$varName是CType时,$$varName就等于$CType)。
方案二:表头文本与变量名可能不同时的灵活写法
如果以后你需要修改表头文本(比如把CPricePyed改成已支付价格),可以用关联数组来存储变量名和对应的表头文本,扩展性更强:
// 键是变量名,值是要显示的表头文本 $headerMap = [ 'CType' => 'CType ', 'CNr' => 'CNr ', 'CValFrom' => '数值起始 ', 'CValUntil' => '数值截止 ', // 其他变量按同样格式补充即可 ]; foreach ($headerMap as $varName => $displayText) { if (isset($$varName) && $$varName !== NULL) { echo '<th align="right">' . $displayText . '</th>'; } }
为什么这样更好?
- 代码量骤减:从几十行重复的if判断变成几行循环,可读性更强
- 维护成本降低:以后要添加/删除表头,只需要修改数组,不用复制粘贴一堆代码
- 逻辑统一:所有判断逻辑集中在一处,避免漏写或写错判断条件
内容的提问来源于stack exchange,提问作者Yeva Doreen
相关产品推荐
相关产品推荐

