我有一些简单的事情,我试图以更少的重复来完成。
默认情况下,我希望显示一个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。
答案 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)) {
我在那里放了比所需更多的括号,这样你就可以看到事物的流动。