[英]Efficient way to apply bitwise logic in a php array
我有一个整数数组,其中每个整数值都是一个“组成员身份”位掩码。 例如,array(1,4,5)解释为:
因此,我的问题是,如何有效地计算每个组中的成员数量?
我的出发点是做这样的事情:
$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.