如果然后用较少的重复声明,如何实现这一点?

时间:2011-09-20 23:51:06

标签: php

我有一些简单的事情,我试图以更少的重复来完成。

默认情况下,我希望显示一个div,但是如果$ x == 1,则检查是否$ y!= 1,如果$ y没有,则不显示该块。< / p>

然而,我能想到的最好的是:

if($x) {

    if($y != 1) {

        echo '<div>display block</div>';        
    }

} else {

    echo '<div>display block</div>';

}

这似乎有点重复。

我知道我可以调整一下,做一些像:

$displayBlock = '<div>display block</div>';

if($x) {

    if($y != 1) {

        echo $displayBlock;     
    }

} else {

    echo $displayBlock;

}

但即使如此,我还是觉得有一种方法可以做到这一点,如果还有其他我现在看不到的东西。

如何使用较少的if语句完成上述操作?所以:如果$ x!= 1(默认值),则显示displayBlock。如果$ x == 1,$ y!= 1,则显示显示块。如果$ x == 1&amp;&amp; $ y == 1,然后显示displayBlock。

4 个答案:

答案 0 :(得分:9)

if (!$x || $y != 1) echo $displayBlock;

答案 1 :(得分:3)

+1给zerkms的答案 - 这是钱。为了帮助您将来解决此类问题,查看 truth tables Karnaugh maps可能会很方便。

你基本上有两张支票:

a)$x(强迫为真或假)
b)$y != 1

    $y != 1
      T  F
$x T  1  0
   F  1  1

因此,您可以看到,如果$x为假,或者$y != 1为真,那么您应该显示显示块,因此:

if (!$x || $y != 1) echo $displayBlock;

答案 2 :(得分:2)

为了减少代码量,你可以使用更多的数学方法而不是逻辑; e.g。

<?php

if($x+$y != 2){echo $displayBlock;}

?>

当x和y之和等于2时,显示框仅保持关闭状态。

答案 3 :(得分:1)

检查这些。 http://www.php.net/manual/en/language.operators.logical.php

$displayBlock = '<div>display block</div>';

if((($x) && ($y != 1)) || (!$x)) {
    echo $displayBlock;
}

我们是如何找到这个解决方案的?

查看您的陈述,并按逻辑分析:

If x is true ... and ... y is 1 ...然后打印。

这将我们带到:

(($x) && ($y != 1))

请参阅? X是真理,y是一个。这让你感到沮丧

if (($x) && ($y != 1)) {
    //Do that thing
} else {
    if (! $x) {
        //Do that thing 
    }
}

我们可以简单地写成......

if (($x) && ($y != 1)) {
    //Do that thing
} else { if (! $x) {
    //Do that thing 
}

好的,那说的是什么?

如果conditionA做某事,or如果条件B做某事。

哦,有一个OR。

所以,condtion A || condition B

当然,这让我们回到......

if((($x) && ($y != 1)) || (!$x)) {

我在那里放了比所需更多的括号,这样你就可以看到事物的流动。