有没有人有更有效/更快的方法来获取整数中所有 1 位位置的列表?我有这个:
array_keys(
str_split(
strrev(
decbin(1234)
)
), '1', true
)
输出是:
array(1, 4, 6, 7, 10)
有没有人有更有效/更快的方法来获取整数中所有 1 位位置的列表?我有这个:
array_keys(
str_split(
strrev(
decbin(1234)
)
), '1', true
)
输出是:
array(1, 4, 6, 7, 10)
比字符串和数组操作更快的是位操作:
$x = 1234;
$ak = array();
$i = 0;
while ($x)
{
if ( $x % 2 )
{
$ak[] = $i;
}
$i++;
$x = $x >> 1;
}
print_r($ak);
在这里你有更多的代码行,但它更快......
您可以尝试使用正则表达式,但我敢打赌您的解决方案会更好。
preg_match_all('/1/', strrev(decbin(1234)), $matches, PREG_OFFSET_CAPTURE);
$output = array_map(function($item){
return $item[1];
}, $matches[0]);
输出:
array (size=5)
0 => int 1
1 => int 4
2 => int 6
3 => int 7
4 => int 10