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

PHP如何递归遍历可变结构数组生成所有子数组元素的全组合?

PHP 不定结构关联数组全量组合生成实现

核心逻辑

通过递归逐维处理关联数组的子数组:

  • 初始状态组合为包含1个空字符串的数组
  • 每次取出当前待处理的第一个子数组,将其每个元素和已有所有组合做拼接
  • 剩余子数组递归执行上述逻辑,直到所有子数组处理完毕,得到全量组合

完整代码实现

function generateAllCombinations(array $arr): array
{
    // 递归终止条件:所有子数组处理完毕
    if (empty($arr)) {
        return [''];
    }
    // 取出第一个子数组,剩余数组留作递归处理
    $firstChild = array_shift($arr);
    // 递归处理剩余子数组,拿到后续维度的所有组合
    $restCombinations = generateAllCombinations($arr);
    
    $result = [];
    // 遍历当前维度每个元素,和后续所有组合拼接
    foreach ($firstChild as $item) {
        foreach ($restCombinations as $combination) {
            // 自动处理首尾多余空格
            $result[] = trim($item . ' ' . $combination);
        }
    }
    return $result;
}

使用示例

// 示例输入数组
$values = [
    'sizes' => ['S', 'M', 'L', 'XL'],
    'colors' => ['Red', 'Blue', 'Green'],
    'types' => ['Short', 'Long'],
];

$allCombinations = generateAllCombinations($values);
// 遍历输出所有组合
foreach ($allCombinations as $str) {
    echo $str . PHP_EOL;
}

适配说明

  • 支持任意数量的子数组:不管是2个、3个还是更多维度的子数组都可以正常处理
  • 支持单元素子数组:如果某个子数组只有1个元素,也会正常拼接到所有组合中
  • 不依赖关联数组的键名:不管键名是什么都不影响组合生成逻辑
  • 如需保留维度对应的键名信息,可修改拼接逻辑返回结构化数组,而非直接拼接字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:39:03