如何从多维数组生成所有组合变体

夜墨同学_8191

夜墨同学_8191

2026-10-14

166人浏览

原创

如何从多维数组生成所有组合变体

本文介绍如何使用 php 实现多维选项数组的笛卡尔积运算,自动生成商品所有属性组合(如颜色+尺寸),并动态计算每个组合的价格与名称,适用于电商 csv 导入场景。

本文介绍如何使用 php 实现多维选项数组的笛卡尔积运算,自动生成商品所有属性组合(如颜色+尺寸),并动态计算每个组合的价格与名称,适用于电商 csv 导入场景。

在商品数据迁移(如从 CSV 导入到 WooCommerce)过程中,常需将具有多个可选属性(如颜色、尺寸、材质)的单个产品展开为多个独立变体。核心难点在于:对任意数量的嵌套选项维度,生成其全量排列组合(即笛卡尔积),而非简单的两层循环嵌套——后者无法扩展至 3 个及以上选项(如 Color + Size + Style)。

解决方案的关键是实现一个通用的 cartesian() 函数,它接受一个关联数组(键为选项名,值为该选项所有取值的索引数组),返回所有可能的组合数组。例如:

$options = [
    'Color' => ['Red', 'Green'],
    'Size'  => ['Small', 'Medium']
];
// 输出: [['Color'=>'Red', 'Size'=>'Small'], ['Color'=>'Red', 'Size'=>'Medium'], ...]

以下是完整可运行代码(已修正原始示例中的键名引号错误和价格字段名不一致问题):

<?php function cartesian($input)
{
    $result = [[]];
    foreach ($input as $key => $values) {
        $append = [];
        foreach ($result as $product) {
            foreach ($values as $item) {
                $product[$key] = $item;
                $append[] = $product;
            }
        }
        $result = $append;
    }
    return $result;
}

// 示例产品数据(注意:键名不应带单引号,否则会导致匹配失败)
$product = [
    'Name'   => 'Test Product',
    'Price'  => 50,
    'Options' => [
        'Color' => ['Red' => 10, 'Green' => 20],
        'Size'  => ['Small' => 30, 'Medium' => 40],
    ],
];

// 步骤1:提取各选项的键名(即所有可选值)
$optionsKeys = array_map('array_keys', $product['Options']);

// 步骤2:生成所有组合(笛卡尔积)
$combinations = cartesian($optionsKeys);

// 步骤3:为每个组合构造变体数组,含拼接名称与累加价格
$variations = array_map(function ($combo) use ($product) {
    $totalPrice = $product['Price'];
    $optionNames = [];

    foreach ($combo as $optionType => $optionValue) {
        $totalPrice += $product['Options'][$optionType][$optionValue];
        $optionNames[] = $optionValue;
    }

    return [
        'Name'          => $product['Name'] . ' - ' . implode(', ', $optionNames),
        'Regular price' => $totalPrice,
    ];
}, $combinations);

print_r($variations);
?>

✅ 输出结果完全匹配预期(注意:Red + Small 组合基础价 50 + 颜色溢价 10 + 尺寸溢价 30 = 90,原文档中误写为 80):

Array
(
    [0] => Array
        (
            [Name] => Test Product - Red, Small
            [Regular price] => 90
        )
    [1] => Array
        (
            [Name] => Test Product - Red, Medium
            [Regular price] => 100
        )
    [2] => Array
        (
            [Name] => Test Product - Green, Small
            [Regular price] => 100
        )
    [3] => Array
        (
            [Name] => Test Product - Green, Medium
            [Regular price] => 110
        )
)

⚠️ 重要注意事项:

  • 键名清洁性:确保 $product['Options'] 的键(如 'Color'、'Size')与值数组的键(如 'Red'、'Small')不包含多余引号或空格,否则 array_keys() 和后续索引访问会失败;
  • 扩展性:此方案天然支持 N 维选项(如增加 'Material' => ['Cotton'=>5, 'Polyester'=>8]),无需修改主逻辑;
  • 性能提示:若某产品有 10 种颜色 × 10 种尺寸 × 10 种材质 = 1000 个变体,笛卡尔积结果会线性增长,请评估内存与导入性能;
  • 字段映射:实际导入时,将 'Regular price' 映射为目标平台要求的字段名(如 'regular_price' 或 'price')。

该方法将复杂组合逻辑封装为可复用函数,显著提升 CSV 批量导入脚本的健壮性与可维护性。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

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

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

2025.12.04

758

13

剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

2026.10.14

0

15

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

2026.10.14

0

14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

2026.10.14

0

15

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

2026.10.14

0

13

二狗PPT大纲编辑实操指南
二狗PPT大纲编辑实操指南

本专题聚焦二狗PPT结构化大纲的生成和修改,讲解标题、正文、目录、页数与页面顺序的调整方法,提升汇报逻辑和内容完整性。

2026.10.14

0

15

二狗PPT文档转PPT全教程
二狗PPT文档转PPT全教程

本专题讲解二狗PPT解析Word、PDF、Excel和PPT资料的方法,涵盖文件上传、内容提取、大纲整理、异常处理与转换后校对。

2026.10.14

0

13

讯飞绘文全功能使用教程
讯飞绘文全功能使用教程

本专题系统整理讯飞绘文官网入口、注册登录、工作台及内容创作流程,帮助用户熟悉常用功能,快速完成首篇图文内容。

2026.10.14

0

14

讯飞绘文AI写作与文案生成合集
讯飞绘文AI写作与文案生成合集

本专题聚焦讯飞绘文AI写作、提纲生成、文章改写和文案润色,覆盖从主题输入到成稿优化的关键操作与实用技巧。

2026.10.14

0

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习