例如我有一个整数
$binary = decbin($mask); // "11010010"
二进制是
$expected = [2, 5, 7, 8];
现在我想将此($ mask或$ binary)转换为索引为true的数组:
%appdata%\Microsoft\VisualStudio\14.0
这样做的最佳方式是什么?
答案 0 :(得分:1)
您可以手动执行此操作:
$expected = array();
$mask = 210;
$binary = strrev(decbin($mask)); // strrev reverts the string
for ($i = 0; $i < strlen($binary); $i++)
{
if ($binary[$i] === '1') $expected[] = ($i + 1);
}
工作IDEOne demo。
重要提示:位通常从零开始计算。所以,正确答案是“1 4 6 7”。将($i + 1)
更改为$i
以获得此结果。
答案 1 :(得分:0)
将$ binary拆分为一个数组,按0给自己的偏移量从1而不是从0开始,反转它,过滤以删除falsey值,然后获取键
$mask = 210;
$binary = decbin($mask); // "11010010"
$tmp = str_split($binary, 1);
$tmp[] = 0;
$expected = array_keys(
array_filter(
array_reverse($tmp)
)
);
var_dump($expected);