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

时间:2013-05-07 21:12:58

标签: php arrays if-statement count associative-array

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

最终结果是创建一个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
}

5 个答案:

答案 0 :(得分:33)

我会使用array_filter。

$array = array(true, true, false, false);
echo count(array_filter($array));
//outputs: 2

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

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

答案 1 :(得分:7)

由于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
}

doc:“FALSE将产生0(零),而TRUE将产生1(一)。”

答案 2 :(得分:2)

尝试这种方法:

<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>

结果:

Array
(
   [1] => 2
   [hello] => 2
   [world] => 1
)

Documentation

答案 3 :(得分:0)

像这样?

$trues = 0;
foreach((array)$array as $arr) {
   $trues += ($arr ? 1 : 0);
}
return ($trues==1);

答案 4 :(得分:0)

您是否尝试使用array_count_values获取包含所有内容的数组?然后检查有多少真实?