繁体   English   中英

在php数组中应用按位逻辑的有效方法

[英]Efficient way to apply bitwise logic in a php array

我有一个整数数组,其中每个整数值都是一个“组成员身份”位掩码。 例如,array(1,4,5)解释为:

  • 第一个元素(1)是组0的成员(即2 ** 0)
  • 第二个元素(4)是第2组的成员(即2 ** 2)
  • 第三个元素(5)是第0组和第2组的成员(即2 ** 0 + 2 ** 2)

因此,我的问题是,如何有效地计算每个组中的成员数量?

我的出发点是做这样的事情:

$count = array();

for ($i=0; $i<64; $i++) {
  $count[$i] = 0;
  $comparator = 2**$i;
  foreach ($array as $value) {
    if ($comparator & $value) $count[$i]++;
  }
}

这似乎是解决问题的漫长道路。 如果数组中有1000个元素,那么我将进行64 X 1000次迭代。

有没有更简单的方法可以做到这一点? 例如,使用高级数组技术还是按位扩展的php扩展?

如果您实际上不需要保留64个组,而62个组就足够了(或者在32位平台上为30个),那么以下代码将为您提供帮助:

  $count = array();
  $data  = array(1, 4, 5, 7);

  foreach ($data as $x)
    for ($i=0, $j = 1; $j <= $x; $i++, $j <<= 1)
        if($x & $j)
            $count[$i]++;

  print "count=";
  print_r($count);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM