php从多维数组中获取所有有效组合

php从多维数组中获取所有有效组合,php,arrays,Php,Arrays,我有一个数组,它表示键中允许的值。此数组的长度是动态的 array( 10=>array(100,101,102), 11=>array(100,104), 12=>array(100,102,103) ) 在本例中,键10可以有100、101和102 我想得到所有有效的组合,其中每个值只出现一次 array( array(10=>array(100,101,102),11=>array(104),12=>array(103)), arra

我有一个数组,它表示键中允许的值。此数组的长度是动态的

array(
 10=>array(100,101,102),
 11=>array(100,104),
 12=>array(100,102,103)
)
在本例中,键10可以有100、101和102

我想得到所有有效的组合,其中每个值只出现一次

array(
   array(10=>array(100,101,102),11=>array(104),12=>array(103)),
   array(10=>array(100,101),10=>array(104),12=>array(102,103)),
   array(10=>array(101),10=>array(100,104),12=>array(102,103)),
   array(10=>array(101),10=>array(104),12=>array(100,102,103)),
   AND SO ON
)
他们希望您找到每个索引的幂集,然后计算这些幂集的幂集

此代码将允许您计算每个索引的功率集。它应该让你开始,让你知道如何完成问题的其余部分

function power_set($arr)
{
    $sets = [];

    for ($i = 0; $i < pow(2, count($arr)); $i++) {
        $set = [];
        for ($j = 0; $j < count($arr); $j++) {
            if ($i & (1 << $j)) {
                $set[] = $arr[$j];
            }
        }
        if (count($set) > 0) {
            $sets[] = $set;
        }
        $set = [];
    }
    return $sets;
}
我注意到的一件事是,您没有包括集合没有元素的情况。从技术上讲,这应该包括在内,所以我会检查以确保您的样本输出是正确的。我修改了算法以排除这种情况,但我认为应该包括它

如果要包含它,请删除检查
$set

中元素数量的If语句,它们希望您找到每个索引的值,然后计算集合的幂集

此代码将允许您计算每个索引的功率集。它应该让你开始,让你知道如何完成问题的其余部分

function power_set($arr)
{
    $sets = [];

    for ($i = 0; $i < pow(2, count($arr)); $i++) {
        $set = [];
        for ($j = 0; $j < count($arr); $j++) {
            if ($i & (1 << $j)) {
                $set[] = $arr[$j];
            }
        }
        if (count($set) > 0) {
            $sets[] = $set;
        }
        $set = [];
    }
    return $sets;
}
我注意到的一件事是,您没有包括集合没有元素的情况。从技术上讲,这应该包括在内,所以我会检查以确保您的样本输出是正确的。我修改了算法以排除这种情况,但我认为应该包括它

如果要包含它,请删除检查
$set
中元素数量的If语句