有没有办法优化这样的东西?
我已经尝试过它不起作用(至少在php中)
$foo = 6;
if ($foo != (3 or 5 or 10)) echo "it work";
elseif($foo < (5 or 10)) echo "it work again";
else echo "it doesn't work;"
我想知道是否有更好的方法来编写这种验证 但是,如果这样的事情在其他langs中工作,请告诉我。
<小时/> 编辑:
($foo != (3 or 5 or 10)) -> in_array($foo,array(3,5,10))
如果我想要像
($foo != (3 and 5 and 10))
答案 0 :(得分:3)
没有。不是。您针对$foo
次操作的BOOLEAN结果测试了or
值。它归结为
if ($foo != (true or true or true))
只是
if ($foo != true)
if (!$foo)
如果要针对多个值测试单个值,可以尝试
if(!in_array($foo, array(3,5,10))) { ... }
代替。对于您的<
版本,这不会起作用。您必须单独测试每个值:
if (($foo < 5) or ($foo < 10)) { ... }
虽然从技术上讲这有点多余,因为如果$ foo小于5,它已经不到10。
答案 1 :(得分:0)
首先你可以使用
if(!in_array($foo, [5,10,15]))
第二件事在任何语言都不起作用,因为每件小于10的事情都不到5或10。所以不需要5.但我明白你的意思。我不知道这样做的快捷方式
在python中你可以这样做:
if(5 < x < 10)
a, b = b, a // swapping these two
答案 2 :(得分:0)
我同意其他答案,如果你有更多的处理要做,你也可以这样做:
<?php
$x = 3;
switch ($x)
{
case 6:
$x = 5;
case 3:
case 7:
$x = 5;
case 5:
echo 'It is working' . PHP_EOL;
break;
}
编辑:感谢DanFromGermany指出堆叠的案例。添加它们作为示例。