比较PHP中的多个变量

时间:2015-07-24 18:22:04

标签: php

我有四个变量,如果它们中的任何两个或多个返回true,我需要抛出一个错误。我可以在技术上做这样的事情:

if (($var1 && $var 2) || ($var1 && $var3) || ($var1 && $var 4) ... || ($var4 && $var3)),但这非常复杂,难以管理。我认为必须有更好的方法来做到这一点。

感谢。

4 个答案:

答案 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,您基本上可以将布尔值视为整数。 true1false0。鉴于四个变量是布尔值,你可以将它们加起来*:

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!";