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

如何生成未被用户选用的6个唯一彩票号码数组?

问题描述

现有01至36的号码池,需生成包含6个唯一号码的数组,且这些号码从未出现在user.json的lottery_number字段中。

号码池定义:

$arr = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36");

user.json示例数据:

$userdata =  [
        {
            "username": "ananda",
            "lottery_number": [
                "09",
                "15",
                "17",
                "22",
                "25",
                "27"
            ],
            "status": "1",
            "id": 1
        },
        {
            "username": "jaka0",
            "lottery_number": [
                "01",
                "08",
                "09",
                "25",
                "16",
                "03"
            ],
            "status": "0",
            "id": 2
        },
        {
            "username": "jaka1",
            "lottery_number": [
                "09",
                "07",
                "06",
                "24",
                "12",
                "21"
            ],
            "status": "0",
            "id": 3
        }
];

原尝试逻辑(效果不佳):

$arr = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36");

$totalarr = [];
$totalarr = array_merge($totalarr ,$arr);
foreach($userdata as $user) {
$totalarr = array_merge($totalarr ,$user['lottery_number']);
}
$totalarr = array_merge($totalarr ,$arr);
$r = array_filter(array_count_values($totalarr ), function($v) { return $v > 1; });
$key = array_keys($r, min($r));
正确实现逻辑

核心思路是先收集所有已被用户选过的号码,再从号码池中筛选出从未被选过的号码,最后从中随机选6个唯一号码。

步骤分解

  • 遍历userdata,提取所有lottery_number字段的号码,合并成去重后的已选号码集合。
  • 计算号码池与已选号码的差集,得到所有未被选过的候选号码。
  • 验证候选号码数量是否满足6个(按场景36总号码-最多18个已选,剩余18个足够)。
  • 随机打乱候选号码后取前6个,保证结果随机性。

PHP代码实现

// 定义号码池
$numberPool = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10",
                    "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
                    "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
                    "31", "32", "33", "34", "35", "36");

// 收集所有已选号码并去重
$selectedNumbers = [];
foreach ($userdata as $user) {
    $selectedNumbers = array_merge($selectedNumbers, $user['lottery_number']);
}
$selectedNumbers = array_unique($selectedNumbers);

// 筛选未被选过的号码
$availableNumbers = array_diff($numberPool, $selectedNumbers);

// 随机选取6个唯一号码
shuffle($availableNumbers);
$generatedNumbers = array_slice($availableNumbers, 0, 6);

// 输出结果
print_r($generatedNumbers);

代码说明

  • array_unique:确保已选号码集合无重复值,避免差集计算出错。
  • array_diff:直接得到号码池中未被选过的所有号码,比统计出现次数更高效直接。
  • shuffle + array_slice:打乱候选号码顺序后取前6个,保证结果的随机性和唯一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:15:09