2013-05-07 57 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