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 } 

Я бы использовал 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 (значение == false). Тогда просто получите счет. Если вам нужно отфильтровать на основе некоторого специального значения, например, если вы ищете определенное значение, array_filter принимает необязательный второй параметр, который является функцией, которую вы можете определить, чтобы вернуть значение true (не фильтруется) или false (отфильтровано ).

Поскольку 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 (один)».

Попробуйте этот подход:

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

Результат:

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

Документация

как это?

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

Вы пытались использовать array_count_values для получения массива со всем подсчитанным? Затем проверьте, сколько истинности существует?