【问题标题】:How to check whether two conditions/rules match?如何检查两个条件/规则是否匹配?
【发布时间】:2012-11-27 21:16:23
【问题描述】:

我有一些项目,每个项目都有一个规则,我想知道哪个项目与另一个项目匹配。

假设项目 1 具有规则 1,项目 2 具有规则 2:

规则 1:

z and d and (y or u) and j

规则 2:

u or ((e or z) and (d or y))

如何检查这些项目是否匹配?

【问题讨论】:

  • 尝试为每个可能的值创建真值表并进行比较。
  • 看起来 z、d、y、u 和 j 是你的上下文变量。
  • @hakre 以及如何以编程方式找到它们?:-)
  • @AlexHowansky 我添加了一些代码 :-)
  • @John Walker 您基本上选择了每一个组合(2^<NumberOfVariables>)并使用这两个规则计算结果。如果它们都匹配,则规则相等。

标签: php match conditional-statements logical-operators


【解决方案1】:

您创建了一个真值表: 对于输入变量的每个可能组合,计算两个规则的结果。 如果它们为每个组合提供相同的值,则规则是相等的。

【讨论】:

    【解决方案2】:

    这是我从你的问题中得到的:

    <?php
    $rule1 = false;
    $rule2 = false;
    
    if($z && $d && ($y || $u) && $j){
        $rule1 = true;
    }
    
    if($u || (($e || $z) && ($d || $y))){
        $rule2 = true;
    }
    
    if($rule1==$rule2){
        echo 'These rules match.';
    }else{
        echo 'These rules do not match.';
    }?>
    

    【讨论】:

    • 我没有变量 $z, $d ...我可以将它们定义为 true 但这没有意义
    【解决方案3】:

    您可以将每个规则的结果分配给变量:

    $rule1 = $z and $d and ($y or $u) and $j;
    $rule2 = $u or (($e or $z) and ($d or $y));
    

    $rule 变量现在都是 truefalse

    $itemsMatch = $rule1 === $rule2;
    

    【讨论】:

    • 我问是因为最终您需要将值传递给标尺库。那是缺少的上下文变量。
    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 2017-07-09
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多