领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

求数组内元素的笛卡尔积(笛卡尔积 left join)

nixiaole 2025-07-27 23:09:07 知识剖析 3 ℃

最近遇到做sku遇到的数学问题,实际上就是求笛卡尔积。

<?php
function generateCombinations(array $arrays): array {
    $result = [[]];
    
    foreach ($arrays as $array) {
        $temp = [];
        foreach ($result as $item) {
            foreach ($array as $element) {
                $temp[] = array_merge($item, [$element]);
            }
        }
        $result = $temp;
    }
    
    return $result;
}

// 示例数据
$array1 = ['A', 'B'];  // 第一个数组
$array2 = [1, 2, 3];   // 第二个数组
$array3 = [1, 2];      // 第三个数组

// 生成所有组合
$combinations = generateCombinations([$array1, $array2, $array3]);

// 输出结果
print_r($combinations);
?>

输出的内容即:

Array
(
    [0] => Array ( [0] => A, [1] => 1, [2] => 1 )
    [1] => Array ( [0] => A, [1] => 1, [2] => 2 )
    [2] => Array ( [0] => A, [1] => 2, [2] => 1 )
    [3] => Array ( [0] => A, [1] => 2, [2] => 2 )
    [4] => Array ( [0] => A, [1] => 3, [2] => 1 )
    [5] => Array ( [0] => A, [1] => 3, [2] => 2 )
    [6] => Array ( [0] => B, [1] => 1, [2] => 1 )
    [7] => Array ( [0] => B, [1] => 1, [2] => 2 )
    [8] => Array ( [0] => B, [1] => 2, [2] => 1 )
    [9] => Array ( [0] => B, [1] => 2, [2] => 2 )
    [10] => Array ( [0] => B, [1] => 3, [2] => 1 )
    [11] => Array ( [0] => B, [1] => 3, [2] => 2 )
)
最近发表
标签列表