PHP Count Number of True Values in a Boolean Array

2019-03-26 06:38发布

I have an associative array in which I need to count the number of boolean true values within.

The end result is to create an if statement in which would return true when only one true value exists within the array. It would need to return false if there are more then one true values within the array, or if there are no true values within the array.

I know the best route would be to use count and in_array in some form. I'm not sure this would work, just off the top of my head but even if it does, is this the best way?

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

if (count(in_array(true,$array,true)) == 1)
{
    return true
}
else
{
    return false
}

5条回答
戒情不戒烟
2楼-- · 2019-03-26 06:54

Try this approach :

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

Result :

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

Documentation

查看更多
Deceive 欺骗
3楼-- · 2019-03-26 06:57

Since TRUE is casted to 1 and FALSE is casted to 0. You can also use array_sum

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

From the doc : "FALSE will yield 0 (zero), and TRUE will yield 1 (one)."

查看更多
做个烂人
4楼-- · 2019-03-26 06:59

I would use array_filter.

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

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

Array_filter will remove values that are false-y (value == false). Then just get a count. If you need to filter based on some special value, like if you are looking for a specific value, array_filter accepts an optional second parameter that is a function you can define to return whether a value is true (not filtered) or false (filtered out).

查看更多
smile是对你的礼貌
5楼-- · 2019-03-26 07:10

like this?

$trues = 0;
foreach((array)$array as $arr) {
   $trues += ($arr ? 1 : 0);
}
return ($trues==1);
查看更多
我想做一个坏孩纸
6楼-- · 2019-03-26 07:16

Have you tried using array_count_values to get an array with everything counted? Then check how many true's there are?

查看更多
登录 后发表回答