有办法把 if 判断提出?

发布于 2022-09-11 17:27:13 字数 500 浏览 9 评论 0

if (
      $row['sale_type'] == 'pre' && $row['stock_type'] == '' or
      $row['sale_type'] == '' && $row['delivery_from'] != 0 or
      $row['sale_type'] == '' && $row['delivery_from'] == 0 && $row['stock'] == 0 && $row['stock_type'] == 'pre' ) {

      // do something
    }

$row 会变,do something 也会变
但是带入的值都会是一样的,if or 的判断也是长得一样
这样有办法提出来吗?
发现网站有十几个一样的判断,想提出来,方便管理

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情魔剑神 2022-09-18 17:27:13

别想太多 当something很多的时候 还是建议加if 什么数组 什么逻辑且&& 不用那么花哨 如果阅读起来困难 建议还是用if 打好注释就行

毅然前行 2022-09-18 17:27:13

用变量就好了。别搞太花哨,看起来费劲,一个条件一个变量,取个有意义的变量名,if就变短了

$isSale1 = xxx;
$isSale2 = xxx;
if ($isSale1 || $isSale2) {
}
寄人书 2022-09-18 17:27:13

这样?

function checkXxx($row)
{
    return ($row['sale_type'] == 'pre' && $row['stock_type'] == '' or
      $row['sale_type'] == '' && $row['delivery_from'] != 0 or
      $row['sale_type'] == '' && $row['delivery_from'] == 0 && $row['stock'] == 0 && $row['stock_type'] == 'pre' )
}

if(checkXxx($row) === true)
{
    // do something
}
风透绣罗衣 2022-09-18 17:27:13

这类需求我们一般使用配置数组来实现,尽量不修改代码,下面是例子,具体实现可以根据需求修改

<?php
// 规则配置
$rules = [
    [
        'sale_type' => array('===', 'pre'),
        'stock_type' => array('===', '')
    ],
    [
        'sale_type' => array('===', ''),
        'stock_type' => array('!==', 0)
    ]
];
function checkRule($rules, $row) {
    foreach ($rules as $rule) {
        $ruleResult = True;
        foreach ($rule as $ruleKey => $ruleJudge) {
            eval('$ret = $row[$ruleKey] ' . $ruleJudge[0] . ' $ruleJudge[1];');
            if (!$ret) {
                $ruleResult = False;
            }
        }
        // 由于是 or 条件,只有有一个规则组成立就通过
        if ($ruleResult === True) {
            return True;
        }
    }

    // 所有条件不通过
    return False;
}

if(checkRule($rules, $row)){
    // do something
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文