生成有偏随机数

<?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/p/3047613.html