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