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

如何在按数字区间分组的PHP数组中快速查询随机数对应的分组

实现方案

方案1:单次查询直接遍历(适合查询次数少的场景)

直接遍历区间数组,逐行判断随机数是否落在当前区间,匹配到就直接返回对应值,代码实现简单:

function getGroup($num, $list) {
    foreach ($list as $item) {
        list($start, $end) = explode('-', $item[0]);
        if ($num >= intval($start) && $num <= intval($end)) {
            return $item[1];
        }
    }
    return ''; // 区间完整覆盖1-100的情况下不会走到该分支
}

// 调用示例
$list = [
    ['1-4','first'], 
    ['5-7','next'],
    ['8-10','third group'], 
    ['11-12','another group'],
    ['94-97','almost done'], 
    ['98-100','first']
];
$num = rand(1,100);
$result = getGroup($num, $list);

方案2:预生成映射表(适合多次查询的场景)

因为区间范围固定为1-100,提前把每个数字对应的分组值存入映射数组,后续查询直接取索引即可,查询时间复杂度为O(1),性能更高:

// 预先生成映射表,只需执行一次
$groupMap = [];
foreach ($list as $item) {
    list($start, $end) = explode('-', $item[0]);
    for ($i = intval($start); $i <= intval($end); $i++) {
        $groupMap[$i] = $item[1];
    }
}

// 后续多次查询直接调用即可
$num = rand(1,100);
$result = $groupMap[$num];

只要你的区间是连续无重叠的,两种方案都可以正常运行,可根据自己的业务查询频次选择对应的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:54:03