我正在开展一个个人项目,我一直在寻找所有数组元素的组合,如下所示。当我有一个已定义数量的数组时,我能够找到所有组合,但遗憾的是我没有。
以下是记录在案的代码:
$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")....
依旧......
我不知道我是否清楚自己或者让你更加困惑,但如果需要更多细节,请告诉我。
感谢所有帮助我的人,我非常感谢你们为帮助像我这样的人所付出的努力。
* 编辑:* 更改阵列结构比使用这个更容易生成排列更好吗?
答案 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);
}
}
}
如果它的深度可变,那么你需要一些很棒的递归。