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

17

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

最终目标是创建一个if语句,在数组中仅存在一个true值时返回true。如果数组中有多个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个回答

52

我会使用array_filter。

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

Array_filter将删除false-y(value == false)的值。然后只需获取计数。如果您需要根据某些特定值进行过滤,例如如果您正在寻找特定值,则array_filter接受一个可选的第二个参数,该参数是一个函数,您可以定义该函数来返回一个值是否为true(未过滤)或false(过滤掉)。


14

因为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
}

根据文档: "FALSE将产生0(零),TRUE将产生1(一)"。


这个也可以正常工作,感谢提供! - ThatTechGuy
1
这实际上是一个相当聪明的解决方案。赞! - lgomezma

3
尝试这种方法:
<?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警告。示例:http://codepad.viper-7.com/zPTF0U - Jonathan Kuhn

0

像这样吗?

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

0

你尝试过使用array_count_values来获取一个包含所有计数的数组吗?然后检查有多少个true?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接