在任何给定数量的条件下,是否有一种优雅的方法可以检查多个但不是所有条件是否都是真的?
例如,我有三个变量:$ a,$ b和$ c。 我想检查其中任何两个都是真的。所以以下内容将通过:
$a = true;
$b = false;
$c = true;
但这不会:
$a = false;
$b = false;
$c = true;
此外,我可能想检查7个条件中的4个是否属实,例如。
我意识到我可以检查每个组合,但随着条件数量的增加,这将变得更加困难。循环使用条件并保持计数是我能想到的最佳选择,但我认为可能有不同的方法来做到这一点。
谢谢!
编辑:感谢所有出色的答案,他们非常感谢。 只是把扳手投入到作品中,如果变量不是明确的布尔值怎么办? E.g。
($a == 2)
($b != "cheese")
($c !== false)
($d instanceof SomeClass)
答案 0 :(得分:9)
A "true" boolean in PHP casts to a 1 as an integer, and "false" casts to 0。因此:
s/^(file:\/\/\/.*)\n(.*)/\% $1\n\% $2/g;
...如果三个布尔变量echo $a + $b +$c;
,$a
或$b
中的两个为真,则输出2。 (添加值会隐式将它们转换为整数。)
这也适用于array_sum()
等功能,例如:
$c
...将输出2.
答案 1 :(得分:4)
您可以将变量放在数组中,并使用array_filter()
和count()
来检查真值的数量:
$a = true;
$b = false;
$c = true;
if (count(array_filter(array($a, $b, $c))) == 2) {
echo "Success";
};
答案 2 :(得分:1)
我会选择以下方法:
if (evaluate(a, b, c))
{
do stuff;
}
boolean evaluate(boolean a, boolean b, boolean c)
{
return a ? (b || c) : (b && c);
}
它说的是:
如果您想扩展和自定义条件和变量数量,我可以选择以下解决方案:
$a = true;
$b = true;
$c = true;
$d = false;
$e = false;
$f = true;
$condition = 4/7;
$bools = array($a, $b, $c, $d, $e, $f);
$eval = count(array_filter($bools)) / sizeof($bools);
print_r($eval / $condition >= 1 ? true : false);
我们只需评估真实情况,并确保真实百分比等于或优于我们想要达到的效果。同样,您可以操纵最终的评估表达式来实现您想要的目标。
答案 3 :(得分:1)
这也应该有效,并且可以让你轻松调整数字。
$a = array('soap','soap');
$b = array('cake','sponge');
$c = array(true,true);
$d = array(5,5);
$e = false;
$f = array(true,true);
$g = array(false,true);
$pass = 4;
$ar = array($a,$b,$c,$d,$e,$f,$g);
var_dump(trueornot($ar,$pass));
function trueornot($number,$pass = 2){
$store = array();
foreach($number as $test){
if(is_array($test)){
if($test[0] === $test[1]){
$store[] = 1;
}
}else{
if(!empty($test)){
$store[] = 1;
}
}
if(count($store) >= $pass){
return TRUE;
}
}
return false;
}
答案 4 :(得分:0)
当你使用运算符"&"时,我认为这是一个简单易懂的写作。 ," |"像这样:
$a = true;
$b = true;
$c = false;
$isTrue = $a&$b | $b&$c | $c&$a;
print_r( $isTrue );
让我们自己检查:D
答案 5 :(得分:0)
你可以使用while循环:
$condition_n = "x number"; // number of required true conditions
$conditions = "x number"; // number of conditions
$loop = "1";
$condition = "0";
while($loop <= $conditions)
{
// check if condition is true
// if condition is true : $condition = $condition + 1;
// $loop = $loop + 1;
}
if($condition >= $condition_n)
{
// conditions is True
}
else
{
// conditions is false
}