从数组中找出键,这些键加在一起形成一个给定的数字


Find the keys from array that added together form a given number

我有以下数组

$array = array(
1=>"a",
2=>"b",
4=>"c",
8=>"d",
16=>"e"
);

那么我有以下数字$var = 12;这个数字来自上面数组中的键的和。(显然$var是变化的)

我如何找到实际创建$var的键?

在示例中:

12 = array key 4 + array key 8

二进制数。魔法XD

$array = array(1=>"a",2=>"b",4=>"c",8=>"d",16=>"e");
$results = array();
$num = 12;
foreach($array as $i=>$v) {
    if( $num & $i) $results[$i] = $v;
}
// in this case, you get $results = array(4=>"c",8=>"d");