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 即为最终随机产生的值

 

posted @ 2018-08-17 17:55  寻觅~~  阅读(800)  评论(0编辑  收藏  举报