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

PHP生成符合规则的18行9列随机矩阵问题求助

解决18行9列每行5个数字的随机表格生成问题

需求规则

  • 生成18行9列的表格
  • 每行必须恰好包含5个数字
  • 列数字范围:第1列1-10,第2列11-20,…,第9列81-90,表格内无重复数字
  • 刷新页面时数字位置随机更新

原代码问题分析

原getAllColumnIndexes函数逻辑存在漏洞:在为每列挑选10个行号时,通过随机尝试并限制每行最多5个数字的方式,可能出现剩余可选行不足以填满当前列10个位置的情况,导致部分列的行号数量不足10,最终造成某些行的数字数量达不到5个。

修正方案

换用更可靠的逻辑:先确保每行恰好选中5个列,再验证各列选中次数是否为10(18×5=90,9×10=90,刚好平衡),最后填充对应数字。

<?php
// 初始化18行9列的标记矩阵,true表示该位置要填充数字
$grid = array_fill(1, 18, array_fill(1, 9, false));

// 为每行随机选择5个不同的列进行标记,同时确保每列恰好被选中10次
$columnCounts = array_fill(1, 9, 0);
$valid = false;

// 循环直到生成符合列计数要求的矩阵
while (!$valid) {
    // 重置标记和计数
    $grid = array_fill(1, 18, array_fill(1, 9, false));
    $columnCounts = array_fill(1, 9, 0);
    
    foreach ($grid as $row => &$cols) {
        // 随机选5个不重复的列号
        $selectedCols = array_rand(range(1,9), 5);
        // 兼容PHP版本差异,确保返回数组
        if (!is_array($selectedCols)) {
            $selectedCols = [$selectedCols];
        }
        foreach ($selectedCols as $col) {
            $cols[$col] = true;
            $columnCounts[$col]++;
        }
    }
    
    // 检查所有列的计数是否都是10
    $valid = true;
    foreach ($columnCounts as $count) {
        if ($count !== 10) {
            $valid = false;
            break;
        }
    }
}

// 为每个列生成对应范围的随机不重复数字
$numberList = [];
$startVal = 1;
for ($i = 1; $i <= 9; $i++) {
    $numbers = range($startVal, $startVal + 9);
    shuffle($numbers);
    $numberList[$i] = $numbers;
    $startVal += 10;
}
?>

<table>
<?php
foreach ($grid as $row => $cols) {
    echo '<tr class="active">';
    foreach ($cols as $col => $shouldFill) {
        $num = '';
        if ($shouldFill) {
            // 取出对应列的下一个数字
            $num = array_shift($numberList[$col]);
        }
        echo "<td>{$num}</td>";
    }
    echo '</tr>';
}
?>
</table>

代码说明

  1. 矩阵标记:创建18×9的矩阵,为每行随机选5个列标记为填充位,确保每行必有5个数字。
  2. 校验平衡:检查每个列被标记的次数是否为10,总填充位为90个,9列各10个刚好匹配,不满足则重新生成。
  3. 数字填充:为每个列生成对应范围的随机数字数组,遍历矩阵填充标记位置的数字,确保无重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:40:31