【发布时间】:2016-04-19 00:27:26
【问题描述】:
假设我有这组数组作为输入:
[
0 => [1,2,4,5],
1 => [2,3,4],
2 => [1,3],
]
我想找到所有可能的排列,从每个数组中选择一个值。该值在最终结果中将是唯一的,因此不会重复。例如,我不能在结果中出现两次1。
输入上的数组计数与输出上的数组计数相同。
想要的组合示例(键=>值):
[0 => 1,1 => 2,2 => 3]
[0 => 2,1 => 3,2 => 1]
[0 => 5,1 => 2,2 => 1]
[0 => 1,1 => 3,2 => null]
错误的结果
[0 => 1,1 => 2,2 => 1]
或
[0 => 2,1 => 2,2 => 3]
我想使用 PHP 获得所有可能的排列组合。我该怎么做?
我附上了真实的数据集http://pastebin.com/U6Hyawm4 但是,我不知道可能有多少排列。
【问题讨论】:
-
我发现你的示例输出有点混乱 - 你能提供一个 full 示例输出吗?
-
我也对您的预期输出感到有些困惑。请提供您期望的示例数据的所有组合。正如我现在所看到的,您只想从每个子数组中选择一个数字,但不想要重复的值。但是您仍然希望每个组合都是所有子数组的长度。您似乎还使用 NULL 作为“填充符”来获得您的组合长度。所以你认为它是每个子数组中的一个值?!如果最后两个子数组仅包含 1 和 2,那么可能是这样的组合:
[1, 2, NULL, NULL]? -
如果你有 3 个子数组,
[NULL, NULL, NULL]是一个可能的组合吗?还是“NULL”只是一个填充物?此外,当您在输出中显式显示键时,您是否要使用子数组的键?还是恰好是同一个? -
@Rizier123
[NULL, NULL, NULL]是不可能的组合。此外,[1, 2, NULL, NULL]不是因为它有 4 个元素。基本上,NULL仅在当前子数组的每个元素都已被使用时出现,如本例所示:[0 => 1,1 => 3,2 => null]。[1,3]作为第三个子数组。但是1和3已经从之前的子数组中被挑选出来,所以它不能被再次挑选出来。 -
@simPod 好的,所以它只是获得组合的预期长度的填充物。但只是为了确保:如果您有 4 个子数组,那么如果最后两个子数组仅包含 1 个或 2 个,
[1, 2, NULL, NULL]是可能的吗? + 它们是来自输入数组的输出的键还是只是枚举的?
标签: php arrays combinations