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;
}