14

ブール値の真の値の数をカウントする必要がある連想配列があります。

最終結果は、配列内に true 値が 1 つだけ存在する場合に true を返す if ステートメントを作成することです。配列内に 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
}
4

5 に答える 5

44

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 (value == false) の値を削除します。次に、カウントを取得します。特定の値を探している場合など、特別な値に基づいてフィルタリングする必要がある場合、array_filter はオプションの 2 番目のパラメーターを受け入れます。このパラメーターは、値が true (フィルター処理されていない) または false (フィルター処理されていない) のどちらであるかを返すように定義できる関数です。 )。

于 2013-05-07T21:16:39.830 に答える
12

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 (1) を生成します。」

于 2013-05-07T22:16:14.433 に答える