PHP计算布尔数组中的真值数

Tha*_*Guy 11 php arrays associative-array if-statement count

我有一个关联数组,我需要计算其中布尔值的数量.

最终结果是创建一个if语句,当数组中只存在一个true值时,该语句将返回true.如果数组中有多个真值,或者数组中没有真值,则需要返回false.

我知道最好的路线是以某种形式使用count和in_array.我不确定这会起作用,只是在我的头顶,但即使它确实如此,这是最好的方法吗?

$array(a->true,b->false,c->true)    

if (count(in_array(true,$array,true)) == 1)
{
    return true
}
else
{
    return false
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*uhn 37

我会使用array_filter.

$array = array(true, true, false, false);
echo count(array_filter($array));
//outputs: 2
Run Code Online (Sandbox Code Playgroud)

http://codepad.viper-7.com/ntmPVY

Array_filter将删除false-y(value == false)的值.然后得到一个计数.如果需要根据某些特殊值进行过滤,例如,如果要查找特定值,则array_filter接受可选的第二个参数,该参数是您可以定义的函数,用于返回值是true(未过滤)还是false(过滤掉) ).


Fré*_*set 9

由于TRUE被转换为1而FALSE被转换为0.您还可以使用array_sum

$array = array('a'=>true,'b'=>false,'c'=>true);
if(array_sum($array) == 1) {
    //one and only one true in the array
}
Run Code Online (Sandbox Code Playgroud)

文档:"FALSE将产生0(零),而TRUE将产生1(一)."