php 获取数组子集
/**
* 获取子集
*/
public function index(array $arr){
$arr_k = array_keys($arr);//数组键
$count = count($arr);//数组长度
$result = [];//子集结果
$pailies = [];//2进制集合
$max = pow(2,$count)-1;
for($i=0;$i<=$max;$i++){
$str = decbin($i);
$len = strlen($str);
$tc_len = $count-$len;
//填充0
for($j=$tc_len;$j>0;$j--){
$str = '0'.$str;
}
$pailies[] = $str;
}
//通过二进制集合 获取子集
foreach($pailies as $pailie){
$subset = [];
for($n=0;$n<$count;$n++){
$ar_k = $arr_k[$n];
if($pailie[$n] == 1){
$subset[] = $arr[$ar_k];
}
}
$result[] = $subset;
}
return $result;
}