是否有人能够更有效/更快地获得整数中所有1位位置的列表?我有这个:
array_keys(
str_split(
strrev(
decbin(1234)
)
), '1', true
)
输出结果为:
array(1, 4, 6, 7, 10)
答案 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);
这里有更多的代码行,但速度更快......