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

PHP实现多子数组单元素选择的组合计算及表格展示

嘿,这需求我熟!你要的是从4个都是[1,2,3]的子数组里各挑一个元素,生成所有可能的组合,还得用表格展示对吧?安排!

需求明确

咱们先理清楚:4个子数组,每个都有1、2、3三个选项,总共有3^4=81种组合,比如你提到的1111、1222这些都包含在内。

PHP实现方案

我写了一个通用的笛卡尔积函数来生成所有组合,这样就算以后子数组数量或者元素变了,代码也能复用。直接看代码:

<?php
// 初始化你的数组结构,4个子数组都是[1,2,3]
$sourceArrays = [
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3]
];

// 生成笛卡尔积的函数,适用于任意数量的子数组
function generateCartesianProduct($arrays) {
    $result = [[]];
    foreach ($arrays as $currentArray) {
        $tempCombination = [];
        // 把现有组合和当前子数组的每个元素拼接
        foreach ($result as $existingCombo) {
            foreach ($currentArray as $item) {
                $tempCombination[] = array_merge($existingCombo, [$item]);
            }
        }
        $result = $tempCombination;
    }
    // 把每个组合数组转成字符串(比如[1,1,1,1]变成"1111")
    return array_map(function($combo) {
        return implode('', $combo);
    }, $result);
}

// 获取所有组合
$allCombinations = generateCartesianProduct($sourceArrays);

// 输出HTML表格,每行放9个组合,避免表格太宽
echo "<table style='border-collapse: collapse;'>";
$columnCount = 0;
echo "<tr>";
foreach ($allCombinations as $combo) {
    echo "<td style='border: 1px solid #ccc; padding: 4px 8px;'>{$combo}</td>";
    $columnCount++;
    // 每9个换一行
    if ($columnCount % 9 === 0) {
        echo "</tr><tr>";
    }
}
// 闭合最后一行
if ($columnCount % 9 !== 0) {
    echo "</tr>";
}
echo "</table>";
?>
代码说明
  • generateCartesianProduct函数是核心,通过嵌套循环逐层生成所有可能的组合,这是处理多数组组合的标准方法,扩展性很强。
  • 最后把每个组合数组转成字符串,用表格输出时每行放9个,这样看起来更整齐,不会横向拉得太长。
  • 如果需要在命令行输出,只需要把HTML表格的部分换成循环输出字符串,比如每行打印9个组合用空格分隔就行。
输出示例(部分)

这里放一小部分表格效果,完整的会有9行9列共81个组合:

111111121113112111221123113111321133
121112121213122112221223123112321233
131113121313132113221323133113321333
...........................
331133123313332133223323333133323333

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:03:31