首页 >后端开发 >php教程 >如何在 PHP 中递归地从多个数组生成所有组合?

如何在 PHP 中递归地从多个数组生成所有组合?

Linda Hamilton
Linda Hamilton原创
2024-12-14 02:09:10791浏览

How to Generate All Combinations from Multiple Arrays in PHP Recursively?

在 PHP 中从多个数组生成组合

简介

生成所有组合的任务在组合优化问题中经常遇到来自多个数组的项目。本文提出了一种递归解决方案,解决了对可以处理可变数量源数组的函数的需求。

问题陈述

给定几个具有不同数量的数组elements,找到所有项目的组合,其中组合的数量等于每个数组中元素数量的乘积。例如,给定以下数组:

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

我们的目标是生成 18 种组合的数组:

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ...
]

递归解决方案

以下递归函数生成所有可能的组合items:

function combinations($arrays, $i = 0) {
    // If reaching the last array, return the array itself
    if (!isset($arrays[$i])) {
        return array();
    }
    
    // If at the parent array, return the recursive call to the following array
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }
    
    // Get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // Concatenate 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')
        )
    )
);

这将输出预期的数组18 种组合。

以上是如何在 PHP 中递归地从多个数组生成所有组合?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn