我有四个变量,如果它们中的任何两个或多个返回true,我需要抛出一个错误。我可以在技术上做这样的事情:
if (($var1 && $var 2) || ($var1 && $var3) || ($var1 && $var 4) ... || ($var4 && $var3))
,但这非常复杂,难以管理。我认为必须有更好的方法来做到这一点。
感谢。
答案 0 :(得分:4)
Beste方式是使用数组并遍历数组。
$my_vars = array($var1, $var2, $var3, ...);
$test_var = 'something';
$hits = 0;
foreach($my_vars as $var) {
$hits = $var == $test_var ? $hits++: $hits;
if($hits >= 2) {
throw new Exception('This is bad dude...);
}
}
答案 1 :(得分:3)
编辑:array_filter
仅传递数组将返回一个数组,其中包含给定数组中的任何值,并且仍然在其中true
。因此,实现我之前编辑中描述的最简单,最简单的方法可能就是
if (count(array_filter([$a, $b, $c, $d])) >= 2) {
// error
}
原帖:
使用type juggling,您基本上可以将布尔值视为整数。 true
为1
,false
,0
。鉴于四个变量是布尔值,你可以将它们加起来*:
if (array_sum([$a, $b, $c, $d]) >= 2) {
throw new WhateverException;
}
如果值实际上不是布尔值,则可以显式转换它们:
if (array_sum(array_map(function($i) { return (bool) $i; }, [$a, $b, $c, $d])) >= 2) {
// error
}
*我使用array_sum
获得最大的灵活性,因为我假设值的数量可能会改变。如果它真的不会**,那么$a+$b+$c+$d
就可以了。
**它会。
答案 2 :(得分:1)
这个怎么样?
<appX>.prod.internalurl.us to go to <appX>.internalurl.us automatically.
答案 3 :(得分:1)
铸造类型&amp;简单总结四个变量
$a = "aaa"; $b = true; $c = false; $d = 1;
if((bool)$a + (bool)$b + (bool)$c + (bool)$d > 2)
print "Error!";