php 生成一批随机数 随机数之合为一个值

<?php
 /**
 *    @param $count 随机数个数
 *    @param $sum 随机数总和
 *    @param $mix 最小随机数
 *    @param $max 最大随机数
 * 
 */
function getRand($count,$sum,$mix,$max){
        ini_set('memory_limit', "1024M");
        $i=1;
        while ($i <= $count) {
            
            $tmp[] = mt_rand($mix,$max);
            $i++;
        }
        $k = $sum / array_sum($tmp);
        $res = [];
        foreach ($tmp as $v) {
            $res[] =  (int) ($v*$k);
        }
        $assoc = $sum - array_sum($res);
        $last = array_pop($res);
        $res[] = $last + $assoc;
        while (max($res) > $max) {
            $tmax = max($res);
            $key = array_search($tmax, $res);
            if($key !== false){
                 $res[$key] = mt_rand($mix,$max);
                 $k = array_search( min($res), $res);
                 $res[$k] = $tmax - $res[$key] + min($res);
            }
        }
        return $res;
}
$res  = getRand(300,400000,300,2000);
var_dump(count($res));
var_dump($res[1]);
var_dump(array_sum($res));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值