PHP按权重随机

时间:2023-03-09 06:31:47
PHP按权重随机

之前业务部门提了一个需求,要求将广告按照ecpm高低进行随机。(即:ecpm高的获取流量的几率大)

如下数组:

 

  //要求AD1的概率要求为50%,AD2概率为25% ,AD3的概率为15%,AD4的概率为10%
  $ecpm  =  array(100,50,30,20);
  $ads  =  array("AD1",'AD2','AD3','AD4');

我们知道,php有自带的生成随机数的函数  mt_rand(min,max)

但是如果只用这个函数,4个选项的概率将是一模一样,那应该怎么办呢?

我们可以将权重值相加 得出$sum,每个权重在0-$sum 中的都有自己的区间,随机  0-$sum,若随机数在权重区间内则判定随机的就是它。

<?php
$max = max($ecpm);
$rand = mt_rand(0,$max);
$step=0;
foreach($ecpm as $k=>$v){
    $step+=$v;
    if($rand<=$step){
      break;//当前项即使随机值
    }
  }
//  $k 即为最终随机产生的值