2013-05-07 4 views
7

私はブール値の真の値の数を数える必要がある連想配列を持っています。PHP Countブール配列の真の値の数

最終的には、配列内に真の値が1つだけ存在する場合にtrueを返すif文を作成します。配列内に真の値が2つ以上ある場合、または配列内に真の値がない場合は、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偽-Yである値(値== false)を除去します。それからちょうどカウントを得る。特定の値を検索する場合など、特定の値に基づいてフィルタリングする必要がある場合、array_filterは、値がtrue(フィルタリングされていない)かfalse(フィルタされているかどうかを返すために定義できる関数)。

+0

完璧、まさに私が必要なもの、ありがとう! – ThatTechGuy

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

これは文字列/整数に対して機能しますが、ブール値を探しています。したがって、これは文字列/ intではなく、すべての要素に対してE_WARNINGをスローします。例:http://codepad.viper-7.com/zPTF0U –

0

をあなたは数え、すべての配列を取得するためにarray_count_valuesを使用してみましたか?それから、どれくらいの真実があるかをチェックします。 (1)「をFALSE 0(ゼロ)をもたらす、真1をもたらす:TRUEので

+0

これはブール値では機能せず、文字列と整数のみで動作します。 – Mark

7

1にキャストされ、0にキャストされるFALSEまたdocからarray_sum

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

を使用することができ"

+0

これはちょうどよく機能していたでしょう、提供のおかげで! – ThatTechGuy

+1

これは実際には非常に巧妙な解決策です。名誉! – lgomezma

関連する問題