You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组组合算法开发需求:仅跨数组元素生成组合

多数组跨元素组合算法解决方案

问题描述

需要开发特定的数组组合算法,要求仅生成来自不同数组元素的组合,不能出现同一数组内元素的组合(例如不能出现A12x,因1和2来自同一数组)。示例输入:['A', 'B', 'C'], [1,2,3], ['x','y'],期望输出包含单个元素、两数组元素组合、三数组元素组合(如A、A1、A1x等)。本人尝试了一段PHP代码但未得到正确结果,求助解决方案。

附尝试代码:

<?php
// Enter your code here, enjoy!
$arrayGlobal = [['A', 'B'], ['1', '2', '3'], ['x', 'y']];
$result = [];
for($i=0; $i<count($arrayGlobal); $i++){
    $tab= $arrayGlobal[$i];
    for($j=0;$j<count($tab); $j++) {
        $result[] = $tab[$j];
        for($k=$i+1; $k<count($arrayGlobal); $k++) {
            $nextTab = $arrayGlobal[$k];
            for($y=0; $y<count($nextTab); $y++) {
                $result[] = $tab[$j].'-'.$nextTab[$y];
                
            }
        }
    }
        
}

print_r($result);

解决方案

你的代码仅生成了单个元素和两个数组的组合,遗漏了三个及以上数组的跨组合(比如A-1-x这类)。要覆盖所有符合要求的组合,需要用递归方式遍历所有非空的、元素来自不同数组的子集组合。

以下是修正后的PHP代码:

<?php
$arrayGlobal = [['A', 'B'], ['1', '2', '3'], ['x', 'y']];
$result = [];

// 递归生成所有跨数组组合
function generateCombinations($arrays, $currentIndex = 0, $currentCombination = '') {
    global $result;
    
    // 非空组合直接加入结果集
    if ($currentCombination !== '') {
        $result[] = $currentCombination;
    }
    
    // 遍历当前索引之后的数组,避免重复取同一数组元素
    for ($i = $currentIndex; $i < count($arrays); $i++) {
        foreach ($arrays[$i] as $element) {
            $newCombination = $currentCombination === '' ? $element : $currentCombination . '-' . $element;
            // 递归处理下一个数组,确保不回头取之前的数组
            generateCombinations($arrays, $i + 1, $newCombination);
        }
    }
}

generateCombinations($arrayGlobal);
print_r($result);

代码说明

  • 递归遍历每个数组,每次递归仅处理当前索引之后的数组,彻底避免从同一数组中取多个元素
  • 所有非空组合都会被加入结果集,覆盖单个元素、跨两数组、跨三数组的所有合法情况
  • 组合元素间用-分隔,和你原代码的格式保持一致

测试结果

运行上述代码后,输入[['A', 'B'], ['1', '2', '3'], ['x', 'y']]会得到以下结果:

Array
(
    [0] => A
    [1] => A-1
    [2] => A-1-x
    [3] => A-1-y
    [4] => A-2
    [5] => A-2-x
    [6] => A-2-y
    [7] => A-3
    [8] => A-3-x
    [9] => A-3-y
    [10] => A-x
    [11] => A-y
    [12] => B
    [13] => B-1
    [14] => B-1-x
    [15] => B-1-y
    [16] => B-2
    [17] => B-2-x
    [18] => B-2-y
    [19] => B-3
    [20] => B-3-x
    [21] => B-3-y
    [22] => B-x
    [23] => B-y
    [24] => 1
    [25] => 1-x
    [26] => 1-y
    [27] => 2
    [28] => 2-x
    [29] => 2-y
    [30] => 3
    [31] => 3-x
    [32] => 3-y
    [33] => x
    [34] => y
)

完全符合需求,包含所有合法组合且无同一数组内元素的组合。

内容的提问来源于stack exchange,提问作者Any

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:10:54