当前位置: 首页 > 面试题库 >

如何在PHP中生成多个数组中项目的所有组合

公冶峰
2023-03-14
问题内容

我试图在几个数组中查找项目的所有组合。数组的数量是随机的(可以是2、3、4、5 …)。每个数组中的元素数量也是随机的…

例如,我有3个数组:

$arrayA = array('A1','A2','A3');
$arrayB = array('B1','B2','B3');
$arrayC = array('C1','C2');

我想生成一个具有3 x 3 x 2 = 18个组合的数组:

  • A1,B1,C1
  • A1,B1,C2
  • A1,B2,C1
  • A1,B2,C2
  • A1,B3,C1
  • A1,B3,C2
  • A2,B1,C1
  • A2,B1,C2 …

问题是要创建一个具有可变数量的源数组的函数…


问题答案:

这是递归解决方案:

function combinations($arrays, $i = 0) {
    if (!isset($arrays[$i])) {
        return array();
    }
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }

    // get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // concat each array from tmp with each element from $arrays[$i]
    foreach ($arrays[$i] as $v) {
        foreach ($tmp as $t) {
            $result[] = is_array($t) ? 
                array_merge(array($v), $t) :
                array($v, $t);
        }
    }

    return $result;
}

print_r(
    combinations(
        array(
            array('A1','A2','A3'), 
            array('B1','B2','B3'), 
            array('C1','C2')
        )
    )
);


 类似资料:
  • 本文向大家介绍从数组数组中返回一个数组,其中每个项目是JavaScript中相应子数组中所有项目的总和,包括了从数组数组中返回一个数组,其中每个项目是JavaScript中相应子数组中所有项目的总和的使用技巧和注意事项,需要的朋友参考一下 给定一个数组数组,每个数组包含一组数字。我们必须编写一个返回数组的函数,其中每个项目都是相应子数组中所有项目的总和。 例如- 如果输入数组是- 那么我们函数的输

  • 如果添加由3个元素组成的第三个列表,我将有36个组合,以此类推。 对于如何在Java中实现这一点有什么想法吗? (伪代码也可以)

  • 给定两个数组,其中数组1包含变量,数组2包含变量的值,我希望得到这两个数组的所有可能组合,例如: 数组可以容纳尽可能多的变量,也可以容纳。 所需输出: 我尝试了一种递归方法: 我希望能够将每一行正确的内容保存为中的一个元素,但首先我想知道如何正确打印每一行。 编辑:第二个数组不是常量,它在每个变量之间不同: 显然,这在递归中行不通,因为我需要将每个数组与变量数组一起发送,我通过创建一个对象来实现这

  • 问题内容: 这是问题: 给定Python中的项目列表,我将如何获得这些项目的所有可能组合? 这个站点上有几个类似的问题,建议使用itertools.combine,但是仅返回我需要的一部分: 如您所见,它仅按严格顺序返回项目,而不返回(2,1),(3,2),(3,1),(2、1、3),(3、1、2),( 2,3,1)和(3,2,1)。有一些解决方法吗?我似乎什么都没想。 问题答案: 用途: 帮助:

  • 问题内容: 目前,我试图让所有可能的组合从的,是每一个元素只包含一个字母。 在本身包含相同字母两次甚至更多,他们只应该,因为他们经常会出现使用。 在稍后应该含有最多的给定的长度从最小的2个字母的所有组合。 我在此处搜索了stackoverflow,但只发现了忽略以下事实的置换函数:每个字母仅在出现时才经常使用。 这是我的第一个Swift 2项目,所以请原谅我的绿色态度:) 我想要的是 我目前的做法

  • 问题内容: 给定未知数量的列表,每个列表的长度都未知,我需要生成一个包含所有可能唯一组合的单数列表。例如,给出以下列表: 然后,我应该能够生成12种组合: 如果添加了第三个元素列表,那么我将有36种组合,依此类推。 关于如何在Java中执行此操作的任何想法? (伪代码也可以) 问题答案: 你需要递归: 假设你的所有列表都在中,这是列表的列表。让是你所需要的排列的列表。你可以这样实现: 最终的呼叫将