【问题标题】:Looking for combinations of an array with undertermined length寻找长度不足的数组的组合
【发布时间】:2011-10-27 04:00:39
【问题描述】:

我正在做一个个人项目,我一直在寻找所有数组元素的组合,如下所示。当我有定义数量的数组时,我能够找出所有组合,但不幸的是我没有。

这是记录在案的代码:

$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

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

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

等等..

我不知道是我说清楚了还是让您更加困惑,但如果需要更多详细信息,请告诉我。

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

*编辑:* 更改数组结构比使用这个更容易生成排列对我来说会更好吗?

【问题讨论】:

  • 我想看看这是否可以用 n 个维度来完成

标签: php multidimensional-array permutation combinations


【解决方案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);
        }
    }
}

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

【讨论】:

  • 谢谢,是的,正如你所说,但不幸的是我不知道数组有多深,因为它取决于用户输入
  • 然后你会看到一些时髦的递归或类似的时髦的 while 循环。我建议您更改获取用户输入的方式。
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2013-07-17
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
相关资源
最近更新 更多