PHP大位数组

时间:2014-08-06 15:01:44

标签: php arrays bit-manipulation

我有1000多个项目的数组。每个索引中的值是1或0.我希望能够进行按位运算,例如计算1的数量,并在此数组上找到1的位置,这将需要将数组转换为二进制数,然后转换为十进制数和执行按位运算(这将非常快速和有效)

想象一下这样的事情:

$array = array(
    "foo" => 1,
    "bar" => 0,
    "test"=> 0,
...
);

我可以使用implode将数组值转换为字符串。

$str = implode('', $array);

这给了我100.但是为了让我做任何按位操作,我首先需要将其转换为十进制数并且如果数组的大小(位数)大于64(64位机器) ,事情不起作用:

$b = bindec($str);  // will fail
$c = $b | 7;

同样地,如果我必须进行任何移位或计数1等,事情就不起作用了。

任何人都知道如何在PHP中克服这个问题。

1 个答案:

答案 0 :(得分:0)

只需进行一些按位操作

$array = array( "foo" => 1, "bar" => 0, "test"=> 1, );

$mask = 0;
$i = 0;
foreach($array as $value)
{
$mask |= $value << $i;
$i++;
}

var_dump($mask); // 5