优化获取位列表的位置列表的方法



有没有人有更有效/更快的方法来获取整数中所有 1 位位置的列表?我有这个:

array_keys(
    str_split(
        strrev(
            decbin(1234)
        )
    ), '1', true
)

输出为:

array(1, 4, 6, 7, 10)

你可以尝试使用正则表达式,但我敢打赌你的解决方案更好。

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

比字符串和数组操作更快的是位操作:

$x = 1234;
$ak = array();
$i = 0;
while ($x)
{
    if ( $x % 2 )
    {
        $ak[] = $i;
    }
    $i++;
    $x = $x >> 1;
}
print_r($ak);

在这里,您有更多的代码行,但它更快...

最新更新