我有一个关联数组,我需要在其中计算布尔值的数量。
最终结果是创建一个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
}
答案 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
)
答案 3 :(得分:0)
$trues = 0;
foreach((array)$array as $arr) {
$trues += ($arr ? 1 : 0);
}
return ($trues==1);
答案 4 :(得分:0)
您是否尝试使用array_count_values获取包含所有内容的数组?然后检查有多少真实?