【问题标题】:Combine flags in array to single value using bitwise OR使用按位或将数组中的标志组合为单个值
【发布时间】:2011-03-20 12:46:02
【问题描述】:

如果我有一个标志数组,并且我想将它们与按位连词组合起来

即:

$foo = array(flag1, flag2);

进入

$bar = flag1 | flag2;

PHP 有什么好的函数可以很好地为我做到这一点吗?

【问题讨论】:

    标签: php arrays function bit-manipulation


    【解决方案1】:

    array_reduce 将为您将数组缩减为单个值:

    $res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);
    

    Reduce 在其他语言中有时也称为折叠(向左折叠或向右折叠)。

    【讨论】:

      【解决方案2】:

      你可以这样做

      $bar = $foo[0] | $foo[1]
      

      如果您的数组大小未知,您可以像这样使用array_reduce

      // in php > 5.3
      $values = array_reduce($flagArray, function($a, $b) { return $a | $b; });
      // in php <= 5.2
      $values = array_reduce($flagArray, create_function('$a, $b', 'return $a | $b'));
      

      【讨论】:

        【解决方案3】:
        $values = array_reduce($foo,function($a,$b){return is_null($a) ? $b : $a | $b;});
        

        PHP

        function _mybitor($a,$b){return is_null($a) ? $b : $a | $b;}
        $values = array_reduce($foo,'_mybitor');
        

        $values = array_reduce($foo,create_function('$a,$b','return is_null($a) ? $b : $a | $b;'));
        

        );

        【讨论】:

          【解决方案4】:

          accepted answer 的一个简单建议:为array_sum 创建一个兄弟姐妹。

          function array_or (array $array): int {
              return array_reduce($array, function($a, $b) { return $a | $b; }, 0);
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-22
            • 1970-01-01
            • 1970-01-01
            • 2019-08-29
            • 1970-01-01
            相关资源
            最近更新 更多