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

时间:2013-09-12 11:38:00

标签: php arrays optimization

是否有人能够更有效/更快地获得整数中所有1位位置的列表?我有这个:

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

输出结果为:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

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

print_r($ak);

这里有更多的代码行,但速度更快......