如何在php中将15转换为1,2,4,8

如何在php中将15转换为1,2,4,8,php,binary,Php,Binary,就这样, 1 = 1 2 = 2 3 = 1,2 5 = 1,4 6 = 2,4 7 = 1,2,4 9 = 1,8 15 = 1,2,4,8 31 = 1,2,4,8,16 它似乎需要一些二进制函数。找到了这个 function split($n) { $n |= 0; $pad = 0; $arr = array(); while ($n) { if ($n & 1) array_push($arr, 1 << $pad)

就这样,

1 = 1
2 = 2
3 = 1,2
5 = 1,4
6 = 2,4
7 = 1,2,4
9 = 1,8
15 = 1,2,4,8
31 = 1,2,4,8,16
它似乎需要一些二进制函数。

找到了这个

function split($n) {
    $n |= 0;
    $pad = 0;
    $arr = array();
    while ($n) {
        if ($n & 1) array_push($arr, 1 << $pad);
        $pad++;
        $n >>= 1;
    }
    return $arr;
}
函数拆分($n){
$n |=0;
$pad=0;
$arr=array();
而(n美元){
如果($n&1)数组推送($arr,1>=1;
}
返回$arr;
}

您可以使用decbin将数字变成二进制,然后使用数组查找二进制数字。
我使用array_intersect查找“true”值,并使用array_intersect_键在$arr中匹配它们。 这是一种非循环解决方案,可能更快,也可能更快

$arr= [16,8,4,2,1];
$number = 13;
$bin = str_split(str_pad(decbin($number),count($arr),"0",STR_PAD_LEFT));

Echo implode(",", array_intersect_key($arr,array_intersect($bin, ["1"])));

如果顺序很重要,则需要在输出之前对其进行排序

$nums = array_intersect_key($arr,array_intersect($bin, ["1"]));
sort($nums);
Echo implode(",", $nums);

非常简单的解决方案!每个数字都有设置位。到目前为止你做了什么?