例如,我有一个整数
$mask = 210;
它的二进制形式是
$binary = decbin($mask); // "11010010"
现在我想把它($mask或$binary)转换成一个带有索引的数组,这是真的:
$expected = [2, 5, 7, 8];
做这件事最好的方法是什么?
发布于 2015-12-22 16:10:31
您可以手动执行此操作:
$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。
重要说明:位通常从零开始计算。所以,正确的答案应该是“1467”。将($i + 1)更改为$i以实现此结果。
发布于 2015-12-22 16:16:45
将$binary拆分成一个数组,按下0使自己的偏移量从1而不是0开始,反转它,过滤以删除False值,并获取键
$mask = 210;
$binary = decbin($mask); // "11010010"
$tmp = str_split($binary, 1);
$tmp[] = 0;
$expected = array_keys(
array_filter(
array_reverse($tmp)
)
);
var_dump($expected);https://stackoverflow.com/questions/34411127
复制相似问题