生成有偏随机数

<?php
/* 大致思想就是:将剩余展示数目累加
比如:A:5,B:8,C:10
累加后:A:5,B:13,C:23
然后随即一个数,范围0~23
判断 随机数是否小于A或B或C,小于则成功 

效果:谁的剩余展示数目越多,被随机到的几率越高
*/
function pc_rand_weighted($numbers) {
    $total = 0;
    foreach ( $numbers as $number => $weight ) {
        $total += $weight;
        $distribution [$number] = $total;
    }
    $rand = mt_rand ( 0, $total - 1 );
    foreach ( $distribution as $number => $weights ) {
        if ($rand < $weights) {
            return $number;
        }
    }
}
$ads = array (
        'ford' => 12234,//广告客户,剩余展示数目
        'att' => 33424,
        'ibm' => 16823 
);

$ad = pc_rand_weighted ( $ads );
var_dump ( $ad );
?>

 

转载于:https://www.cnblogs.com/bossikill/archive/2013/04/27/3047613.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值