Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组和()?所有元素的逻辑和运算_Php_Arrays_Boolean Logic - Fatal编程技术网

Php 数组和()?所有元素的逻辑和运算

Php 数组和()?所有元素的逻辑和运算,php,arrays,boolean-logic,Php,Arrays,Boolean Logic,我有一个数组,我想知道其中是否至少有一个假值。我正在考虑创建一个array\u and()函数,它只对所有元素执行逻辑and。如果所有值都为true,则返回true,否则返回false。我是不是过度工程化了?你为什么不直接使用 -检查数组中是否存在值 例如: // creates an array with 10 booleans having the value true. $array = array_fill(0, 10, TRUE); // checking if it conta

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

你为什么不直接使用

  • -检查数组中是否存在值
例如:

// 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

这在原则上没有什么错,只要你不去和所有的价值观混为一谈;也就是说,一旦找到第一个
false
,您就应该立即终止:

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

    return true;
}
如果所有值都为true,则返回true,否则返回false

如果数组非空且不包含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);

您应该能够实现一个小函数,该函数接受一个数组并对其进行迭代,检查每个成员是否为false。根据您的检查结果从函数返回bool…

简单但丑陋=>O(N)


另一个选项:

为什么不直接使用array\u product()

$set=数组(1,1,1,1,0,0)

$result=数组\产品($set)

输出:0

逻辑本质上是一个乘数

1*1=1

1*0=0

0*1=0


0*0=0

这是一个非常有效的操作,如果PHP没有内置它,您可以使用
array\u reduce
(或者
fold
,因为这个高阶函数更常用)。@delnan:这需要对整个数组进行迭代,而不管它是否包含
true
,更不用说在数组结束之前是否遇到了
false
。谢谢,我知道我想得太多了:)@user只是想澄清一下:所谓“false值”,实际上是指你想检查数组中是否存在布尔值false,对吗?是的,这恰好是一种布尔值
false
的情况,但这可以推广到PHP的松散类型检查吗?对于松散类型检查,我必须使用函数no?@user no,您只需使用第三个参数
bool$strict
。我已经更新了示例。
$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;
}