数组AND()?所有元素的逻辑AND

时间:2010-11-30 19:56:22

标签: php arrays boolean-logic

我有一个数组,我想知道其中是否至少有一个假值。我正在考虑创建一个array_and()函数,它只对所有元素执行逻辑AND。如果所有值都为真,则返回true,否则返回false。我过度工程了吗?

6 个答案:

答案 0 :(得分:12)

为什么不使用

  • in_array - 检查数组中是否存在值

示例:

// creates an array with 10 booleans having the value true.
$array = array_fill(0, 10, TRUE);

// checking if it contains a boolean false
var_dump(in_array(FALSE, $array, TRUE)); // FALSE

// adding a boolean with the value false to the array
$array[] = FALSE;

// checking if it contains a boolean false now
var_dump(in_array(FALSE, $array, TRUE)); // TRUE

答案 1 :(得分:3)

  

如果所有值都为true,则返回true,否则返回false。

如果array非空且不包含false元素,则返回true:

function array_and(arary $arr)
{
  return $arr && array_reduce($arr, function($a, $b) { return $a && $b; }, true));
}

(请注意,如果您想针对false类型进行测试,则需要进行严格的比较。)

  

我是否过度工程?

是的,因为你可以使用:

in_array(false, $arr, true);

答案 2 :(得分:1)

原则上这没有任何问题,只要你不和所有的价值不加区分;也就是说,您应该在找到第一个false后立即终止:

function array_and(array $array)
{
    foreach ($array as $value)
    {
        if (!$value)
        {
            return false;
        }
    }

    return true;
}

答案 3 :(得分:0)

你应该能够实现一个小函数,它接受一个数组并迭代它,检查每个成员是否为false。根据检查结果从函数中返回一个bool ....

答案 4 :(得分:0)

容易但丑陋=> O(N)

$a = array(1, 2, false, 5, 6, 'a');

$_there_is_a_false = false
foreach ($a as $b) {
    $_there_is_a_false = !$b ? true : $_there_is_a_false;
}

另一种选择:array-filter

答案 5 :(得分:0)

为什么不使用array_product()

  

$ set = array(1,1,1,1,0,0);

     

$ result = array_product($ set);

     

输出:0

AND逻辑本质上是一个乘数。

1 * 1 = 1

1 * 0 = 0

0 * 1 = 0

0 * 0 = 0