【问题标题】:Perform logic operations on boolean array values对布尔数组值执行逻辑运算
【发布时间】:2016-08-19 00:29:39
【问题描述】:

我有一个带有布尔值的数组,例如

$myarray = array(true, false, false, true, false);

现在我想对我的数组值执行一些逻辑运算,所以我得到了输出:

FALSE

来自我的数组。

【问题讨论】:

  • 你想要的结果应该是什么?
  • 为什么是var_dump(),然后echo var_dump()返回的结果?
  • 有意思,这里也提到了:php.net/manual/en/function.implode.php#104568
  • 你认为结果应该是false
  • @Nabi 只是为了澄清一些困惑:你想得到所有数组元素的乘积吗?意味着将每个值相乘?或者你到底想要什么?也许为您的问题添加另一个示例。

标签: php arrays boolean


【解决方案1】:

您试图将布尔值视为字符串,这从根本上是错误的。例如,您想要的是 数组缩减

$res = array_reduce($myarray, function ($a, $b) { return $a && $b; }, true);
                                                     // default value ^^^^

或者更高效的短路all函数:

function all(array $values) {
    foreach ($values as $value) {
        if (!$value) {
            return false;
        }
    }
    return true;
}

if (all($myarray)) ...

【讨论】:

    【解决方案2】:

    您可以在数组中搜索false,如果存在,则返回false,如果不存在,则返回true

    $result = (array_search(false, $myarray, true) === false);
    

    由于您编辑了问题,如果您希望它返回 0 或 1,只需执行以下操作:

    $result = (array_search(false, $myarray, true) === false) ? 1 : 0;
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      $res = true;
      foreach ($myarray as $item) $res &= $item;
      echo var_dump($res);
      

      有点不优雅,但它应该可以工作。最后你会有一个整数,因为我们在这里使用位逻辑,可以改进。

      对于OR 案例,您几乎可以做同样的事情:

      $res = true;
      foreach ($myarray as $item) $res |= $item;
      echo var_dump($res);
      

      【讨论】:

        猜你喜欢
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        • 2020-08-22
        • 2018-02-16
        • 2015-02-06
        相关资源
        最近更新 更多