2013-05-07 58 views
7

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

最终结果是创建一个if语句,当数组中只存在一个真值时,将返回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 
} 

回答

26

我会使用array_filter。

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

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

Array_filter将删除都是假-γ(值==假)值。然后,只需要点数。如果你需要根据一些特殊的值进行过滤,比如你正在寻找一个特定的值,那么array_filter接受一个可选的第二个参数,它是一个你可以定义的函数来返回一个值是真的(不是过滤的)还是假的)。

+0

完美,正是我所需要的,谢谢! – ThatTechGuy 2013-05-07 22:30:08

0

是什么?

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

试试这个办法:

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

结果:

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

Documentation

+1

这适用于字符串/整数,但他们正在寻找布尔值。所以这将为每个元素抛出一个E_WARNING而不是一个字符串/ int。例如:http://codepad.viper-7.com/zPTF0U – 2013-05-07 21:26:33

0

您是否尝试过使用array_count_values得到一切的数组算的?然后检查有多少真实的?

+0

这不适用于布尔值,只适用于字符串和整数。 – Mark 2015-02-19 19:04:25

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(一) “。

+0

这将工作得很好,谢谢你的提供! – ThatTechGuy 2013-05-07 22:36:48

+1

这实际上是一个非常聪明的解决方案。奖励! – lgomezma 2016-09-05 14:47:52