【问题标题】:PHP Count Number of True Values in a Boolean ArrayPHP 计算布尔数组中真值的数量
【发布时间】:2013-05-01 23:20:46
【问题描述】:

我有一个关联数组,我需要在其中计算布尔真值的数量。

最终结果是创建一个 if 语句,当数组中仅存在一个真值时,该语句将返回真。如果数组中有多个真值,或者数组中没有真值,则需要返回 false。

我知道最好的方法是以某种形式使用 count 和 in_array。我不确定这是否可行,只是在我的脑海中,但即使可以,这是最好的方法吗?

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

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

【问题讨论】:

    标签: php arrays if-statement count associative-array


    【解决方案1】:

    我会使用 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(过滤掉)。

    【讨论】:

      【解决方案2】:

      由于 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(一)。”

      【讨论】:

      • 这也可以,感谢您的提供!
      • 这实际上是一个非常聪明的解决方案。赞一个!
      【解决方案3】:

      试试这个方法:

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

      结果:

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

      Documentation

      【讨论】:

      • 这适用于字符串/整数,但它们正在寻找布尔值。所以这将为每个元素而不是字符串/整数抛出一个 E_WARNING。示例:codepad.viper-7.com/zPTF0U
      【解决方案4】:

      喜欢这样吗?

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

      【讨论】:

        【解决方案5】:

        您是否尝试过使用array_count_values 来获得一个包含所有内容的数组?然后检查有多少个 true ?

        【讨论】:

          猜你喜欢
          • 2016-04-08
          • 2023-04-02
          • 2012-07-28
          • 2012-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-14
          • 2017-01-02
          相关资源
          最近更新 更多