是否有算法输出两组元素的所有可能组合?

bla*_*ong 1 php algorithm combinations

我正在用PHP编写一个应用程序,用户可以输入两组信息,并打印出两组的各种可能组合.目标是通过练习不同的问答模式,将其用作学习语言的教学工具.

例如,我们可以练习"你有没有试过......?"的问题.加上四项活动中的一项,如蹦极,帆船,跳伞和水肺潜水.还有四种可能的答案:

  1. 是的,我有,我很喜欢.
  2. 是的我有,但我不喜欢它.
  3. 不,我没有,但我想尝试一下.
  4. 不,我没有,我不想尝试.

用户将输入两组数据,然后应用程序将打印包含问题和答案的所有可能组合的卡片.例如,卡1看起来像这样:

  1. 跳伞:是的,我很喜欢.
  2. 水肺潜水:是的我有,但我不喜欢它.
  3. 滑翔伞:不,我没有,但我想尝试一下.
  4. 蹦极:不,我没有,我不想尝试.

然后下一张卡片可能如下所示:

  1. 跳伞:是的我有,但我不喜欢它.
  2. 水肺潜水:不,我没有,但我想尝试一下.
  3. 滑翔伞:不,我没有,我不想尝试.
  4. 蹦极:是的,我喜欢它.

如您所见,有许多不同的可能组合.我们的想法是两个列表的长度相同,以便打印出所有可能性.同样重要的是,在任何卡上不得多次使用任何问题或答案,并且两张卡可以相同.最好的方法是什么?实际的输入和输出不是问题 - 我以前做过类似的事情.我只需要算法来生成组合.

编辑:我想我真正想要的是保持每张卡的活动顺序相同​​,但要有各种可能的答案组合.所以我真正需要的是能够生成以下索引集,以便从answers数组中获取数据.所以我真的想要更像这样的东西:

  • 0,1,2,3
  • 0,1,3,2
  • 0,2,1,3
  • 0,2,3,1
  • 0,3,1,2
  • 0,3,2,1
  • 1,0,2,3
  • 1,0,3,2
  • 1,2,0,3
  • 1,2,3,0

...等等,直到产生所有可能的组合.

Ste*_*rex 5

试试这个:

$activities = array(); // Input all your activities as elements here.
$responses = array(); // Input all your responses as elements here.

foreach ($activities as $activity) {
    foreach ($responses as $response) {
        echo $activities.' '.$response."\n";
    }
}
Run Code Online (Sandbox Code Playgroud)