寻找具有未确定长度的阵列的组合

时间:2011-10-27 04:00:39

标签: php multidimensional-array permutation combinations

我正在开展一个个人项目,我一直在寻找所有数组元素的组合,如下所示。当我有一个已定义数量的数组时,我能够找到所有组合,但遗憾的是我没有。

以下是记录在案的代码:

$C = array(
"I" => array(
    0   =>  array("I_1_1"),
    1   =>  array("I_1_2")
),
"L" => array(
    0   =>  array("L_1_1"),
    1   =>  array("L_2_1"),
),
"K" => array(
    0   =>  array("K_1_1"),
    1   =>  array("K_1_2"),
    2   =>  array("K_2_1"),
    3   =>  array("K_2_2"),
),
);

目前$ C有3个元素,但这个变量很大,因为你可以有2个元素 此外,$ C内的每个数组也是可变长度的,并且最大长度可以达到144但这是非常罕见的..

无论如何,我的目标是让php脚本输出:

I_1_1       L_1_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

            L_2_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

I_1_2       L_1_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

            L_2_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

我故意不重复输出中的前两列,这样你就可以看到组合的“方向”,但最终输出将是一个包含所有可能组合的数组:

$result = array(array("I_1_1","L_1_1","K_1_1"),array("I_1_1","L_1_1","K_1_2")....

依旧......

我不知道我是否清楚自己或者让你更加困惑,但如果需要更多细节,请告诉我。

感谢所有帮助我的人,我非常感谢你们为帮助像我这样的人所付出的努力。

* 编辑:* 更改阵列结构比使用这个更容易生成排列更好吗?

1 个答案:

答案 0 :(得分:1)

如果阵列只能深入三层,你可以这样做:

$combos = array(array());
foreach($C as $D) {
    $old_combos = $combos;
    $combos = array();
    foreach($D as $E) {
        foreach($old_combos as $combo) {
            $combos[] = array_merge($combo, $E);
        }
    }
}

如果它的深度可变,那么你需要一些很棒的递归。