我有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中克服这个问题。
答案 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