0

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

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

输出是:

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

2 回答 2

0

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

$x = 1234;
$ak = array();
$i = 0;

while ($x)
{
    if ( $x % 2 )
    {
        $ak[] = $i;
    }

    $i++;
    $x = $x >> 1;
}

print_r($ak);

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

于 2013-09-12T12:20:11.070 回答
0

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

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
于 2013-09-12T11:54:01.273 回答